CPP Templates 之 非类型模板参数限制

非类型模板参数是有限制的。通常而言,他们可以使常整数(包括枚举值)或者指向外部链接对象的指针

浮点数和类对象是不允许作为非类型模板参数的:

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声明的.
作用域:代码块.

你可能感兴趣的:(template)