有效的模板参数

valid template argument

本文关键字:参数 有效      更新时间:2023-10-16

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

这是斯特鲁斯特鲁普的书。什么是允许的,什么是不允许的,背后的逻辑是什么?为什么字符串文字是不可接受的?

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

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

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