首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

整数类型的模板参数不可以用变量代入吗?该如何处理

2012-03-09 
整数类型的模板参数不可以用变量代入吗?有一个类模板,其模板参数是一个int类型,我在程序里用:ClassA 3a

整数类型的模板参数不可以用变量代入吗?
有一个类模板,其模板参数是一个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.指向外部链接对象的指针或引用。

热点排行