2012-02-14 91 views
0

模板参数可以是常量表达式(§C.5),具有外部链接(§9.2)的对象或函数的地址,或者是指向成员的非重载指针(§15.5) 。用作模板参数的指针的格式必须为&ooff,其中ooff是对象或函数的名称,或者格式为ff,其中ff是函数的名称。指向成员的指针必须是&XX::ooff,其中ooff是成员的名称。特别是,字符串文字不可接受作为模板参数。有效的模板参数

这是来自stroustrup的书。什么是允许的,什么不是什么的逻辑是什么?为什么字符串不可接受?

我的理解是,编译器应该能够推导出参数的类型,以便它可以为该给定类型内部生成代码。感谢您的帮助

+1

可能重复的[字符串文字不允许作为非类型模板参数](http://stackoverflow.com/questions/5547852/string-literals-not-allowed-as-non-type-template-parameters) – 2012-02-14 05:25:51

+0

那篇文章中的人解释得比书本身好。这就是我正在寻找的。 – PnotNP 2012-02-14 09:01:32

回答

1

编译器不会推导出非类型模板参数的类型。它们由程序员指定。没有什么可以推断的。

这些要求是为了确保编译器能够在编译时确定两个指针是否相等。这反过来又需要确定类模板(函数模板)的两个用法是否指向相同的类型(函数)。