第 724 页,第 25 章,C++ 编程语言
用作模板参数的指针必须采用 &of
形式,其中 of 是对象或函数的名称,或 f
形式,其中 f
是函数名称。指向成员的指针必须采用 &X::of
形式,其中 of 是成员的名称。特别是,字符串文字不能作为模板参数:
template<typename T, char∗ label>
class X {
// ...
};
X<int,"BMW323Ci"> x1; // **error : string literal as template argument**
char lx2[] = "BMW323Ci";
X<int,lx2> x2; // OK: lx2 has exter nal linkage
第 725 页,第 25 章,C++ 编程语言
当与默认模板参数(第 25.2.5 节)结合使用时,这变得特别有用;为了
例子:
template<typename T, T default_value = T{}>
class Vec {
// ...
};
Vec<int,42> c1;
Vec<int> c11; // default_value is int{}, that is, 0
Vec<string,"fortytwo"> c2; // **I'm confused!**
Vec<string> c22; // default_value is string{}; that is, ""
最佳答案
template<typename T, T default_value = T{}>
class Vec {
// ...
};
Vec<string,"fortytwo"> c2;
Vec<string> c22;
涉及 string
的声明都不合法。14.1/4:
14.1/7:
关于c++ - 字符串文字是否不能作为 C++ 中的模板参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20066104/