有效的模板参数
valid template argument
模板参数可以是常量表达式(§C.5)、具有外部链接的对象或函数的地址(§9.2)或指向成员的非重载指针(§15.5)。用作模板参数的指针的形式必须为
&ooff
,其中ooff
是对象或函数名称,或者为ff
,其中ff
是函数名称。指向成员的指针的格式必须为&XX::ooff
,其中ooff
是成员的名称。特别是,字符串文字不能作为模板参数。
这是斯特鲁斯特鲁普的书。什么是允许的,什么是不允许的,背后的逻辑是什么?为什么字符串文字是不可接受的?
我的理解是,编译器应该能够推导出参数的类型,这样它就可以在内部为给定的类型生成代码。感谢的帮助
编译器不推导非类型模板参数的类型。它们由程序员指定。没有什么可推断的。
这些要求是为了确保编译器能够在编译时确定两个指针是否相等。这反过来又需要确定类模板(函数模板)的两次使用是否引用了相同的类型(函数)。
相关文章:
- 我如何知道作为参数的size_t在函数中是否有效?
- "std::shared_ptr":不是参数"_Ty"的有效模板类型参数
- 为什么模板参数中的双冒号有效?
- 函数参数的名称与调用函数时使用的变量相同是否有效?
- 为什么使用不匹配的参数调用重载函数仍然有效
- C++/11 auto 关键字是在更有效时推导参数进行按引用传递,还是始终按值传递?
- 仅当一个参数中未使用 std::function 时,模板函数替换才有效
- 自动模板类enable_if有效参数
- 带有"up-"和"center-vec3"参数的glm::rotate()的有效替代方案?
- 为什么重写方法并将 const 添加到参数类型有效
- 字符串或const char*,更有效地用作构造函数参数
- 在 pthread_create() 中使用局部变量作为参数有效吗?
- 如何有效地传递 std::vector<cv::P oint3f> 的子向量作为参数(不拥有函数)
- 作为模板非类型参数的 C 字符串在 gcc 6.3 中有效,但在 Visual Studio 2017(x64 为 19
- 如果 null 不是有效值,则使参数成为引用而不是指针
- Qt C++ - 创建 QList<Myclass> - 不是参数 'T 的有效模板类型参数
- 如何以有效的方式将输入参数传递给函数
- C++17 有效地将参数包参数与 std::array 元素相乘
- GLSL 错误:"out"限定符仅对 GLSL 1.10 中的函数参数有效
- 使用constexpr函数作为模板参数有效吗