非类型模板参数是有限制的。通常而言,他们可以使常整数(包括枚举值)或者指向外部链接对象的指针
浮点数和类对象是不允许作为非类型模板参数的:
template<double VAT>//ERROR
double process(double V)
{
RETURN V*VAT;
};
template<std::string name>//ERROR
class MyClass{
……
};
由于字符串文字是内部连接对象,所以不能用作模板实参
template<char const* name>
class MyClass{
};
MyClass<"hello"> x;//ERROR:不允许使用字符串文字"hello"
另外,也不能使用全局指针做为模板参数。
--------------以下供参考-------------------
外部链接:
在代码块外声明的或用extern const修饰的
作用域:该程序.
内部链接:
在代码块外用static或const修饰的
作用域:该文件.
无链接:
自动变量,寄存器变量,在代码块中用static声明的.
作用域:代码块.