我知道我们可以使用常量定义模板。例如:
template<int N>
struct FixedArray {
double values[N];
int size() { return N; } // Could be static
};
int main(int, char**) {
FixedArray<10> arr;
arr.values[0] = 3.14;
cout << "first element=" << arr.values[0] << endl;
cout << "size=" << arr.size() << endl;
return 0;
}
此特定示例允许我们定义具有常量大小的数组。
但为什么我们不能在C ++中将字符串作为模板参数传递?
以下幻灯片可以解释它,但我不知道问题出在哪里。
如果有人可以向我指出并解释它,我会很感激。 感谢
答案 0 :(得分:2)
简短的回答是,“因为标准是这样说的”。由于模板参数用于形成类型,因此它们必须足够明确。但是,以下工作:
template <char *> struct Foo { };
char x;
int main()
{
Foo<&x> a;
}
关键是x
现在是一个定义良好,带链接的命名对象,因此它的地址是一个全局的,静态知道的数量。从字符串文字派生的指针不具有相同的质量;它不是命名变量的地址。