为什么我们不能将字符串作为模板参数传递?

时间:2013-09-15 22:36:15

标签: c++ oop templates

我知道我们可以使用常量定义模板。例如:

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 ++中将字符串作为模板参数传递?

以下幻灯片可以解释它,但我不知道问题出在哪里。

如果有人可以向我指出并解释它,我会很感激。 感谢

enter image description here

1 个答案:

答案 0 :(得分:2)

简短的回答是,“因为标准是这样说的”。由于模板参数用于形成类型,因此它们必须足够明确。但是,以下工作:

template <char *> struct Foo { };

char x;

int main()
{
    Foo<&x> a;
}

关键是x现在是一个定义良好,带链接的命名对象,因此它的地址是一个全局的,静态知道的数量。从字符串文字派生的指针不具有相同的质量;它不是命名变量的地址。