设为首页 加入收藏

TOP

4.3 非类型模板参数的限制
2013-10-07 00:05:53 来源: 作者: 【 】 浏览:58
Tags:4.3 类型 模板 参数 限制

4.3  非类型模板参数的限制

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

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

template<double VAT>  //ERROR:浮点数不能作为非类型模板参数
double process (double v) 
{
return v * VAT;
}

template<std::string name> //ERROR:类对象不能作为非类型模板参数
class MyClass {
...
};

之所以不能使用浮点数(包括简单的常量浮点表达式)作为模板实参是有历史原因的。然而,该特性的实现并不存在很大的技术障碍;因此,将来的C++(www.cppentry.com)版本可能会支持这个特性。

由于字符串文字是内部链接对象(因为两个具有相同名称但处于不同模块的字符串,是两个完全不同的对象),所以你不能使用它们来作为模板实参:

template<char const* name>
class MyClass {
...
};

MyClass<”hello”> x;  //ERROR:不允许使用字符串文字”hello”

另外,你也不能使用全局指针作为模板参数:

template <char const* name>
class MyClass {
...
};

char const* s = ”hello”;

MyClass<s> x;   //s是一个指向内部链接对象的指针

然而,你可以这样使用:

template <char const* name>
class MyClass {
...
};

extern char const s[] = ”hello”;

MyClass<s> x;  //OK

全局字符数组s由“hello”初始化,是一个外部链接对象。

详细的讨论,请见8.3.3小节;而13.4节给出了将来在这方面可能出现的改变。


回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.1 非类型的类模板参数 下一篇4.2 非类型的函数模板参数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: