![]() |
1
17
另一个版本是不为禁止的类型定义它
|
![]() |
2
8
很快,我相信有更好的方法:
但是,最好在代码上加上一个胖注释,以防止用户使用错误的类型进行实例化:—) |
![]() |
3
6
|
![]() |
4
2
一般来说,不需要限制可以用哪些类型模板进行实例化。模板可以使用给定的类型进行编译(并且工作正常),或者不可以(并且在程序员不做任何努力的情况下生成编译器错误)。
如果需要设置限制,通常类型有一些共同点,可以用已经可用的类型特征来描述(标准库,
例如,这里有一个模板类,它只允许整数类型,使用
如果您只打算支持少数几种没有共同点的任意类型(从您的假设示例中可以明显看出),一种方法是使用类型列表。再一次,boost可能会使任务变得更简单,但下面是您可以自己滚动的方法(这只是进行了一半,需要额外的工作才能使声明的类型列表更漂亮)。
|
![]() |
5
1
有各种各样的技巧可以检查一些东西,这取决于您的实例化标准是否被允许。在实践中,对于Boost的概念检查,您应该使用更高的杠杆库。 |
![]() |
6
1
我不确定,但您可以为double添加另一个模板专门化 模板
这对你的例子很有用,但对一般情况不适用。 通常,我会添加一个编译断言来检查不需要的类型。 希望有帮助。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 7 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 7 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 7 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 7 月前 |