整数类型的模板参数不可以用变量代入吗?
有一个类模板,其模板参数是一个int类型,我在程序里用:
ClassA <3> a;
这样的声明方式就无误,可是如果改成:
int m=3;
ClassA <m> a;
编译就会出错,说 "Invalid template argument ".
难道说这个参数就只能用常量吗?
[解决办法]
是的。这就是规定。
[解决办法]
恩,因为模版是在编译的时候确定,不能在运行的时候更改的
[解决办法]
对于非类型形参的模板参数,必须为编译期可以确定的常量值。
[解决办法]
同意“因为模版是在编译的时候确定,不能在运行的时候更改的”
[解决办法]
那就请你不要用模板。
[解决办法]
const int n = 3;
s <n> a;
[解决办法]
const int n = 3;
s <n> a;
是换汤不换药,n是常量么,只不过容易更改程序
[解决办法]
如果想设一个Integer类,和Real类,分别实现int和flout类型数据的+,-,*,/运算并检查数据是否溢出,由于int和flout范围不同,在重载运算符时不知如何设定检查范围。
这很可能是楼主的原始需求!
[解决办法]
既然,"有一个类模板,其模板参数是一个int类型,我在程序里用:
ClassA <3> a;
这样的声明方式就无误,"
则说明你的ClassA是一个类模板,且有一个非类型模板形参(non_type template argument)。基于模板技术的编译器实现复杂度,C++标准现对非类型模板参数有如下规定(也许将来对此有所改变):
用以替换非类型模板形参的模板实参(template parameter,也就是上述那个'3')须满足:
1.必须是整型常数或编译期可求值的常量表达式;
2.可以是枚举类型;
3.指向外部链接对象的指针或引用。