-9

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

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

下面的幻灯片应该解释它,但我不明白问题出在哪里。

如果有人可以向我指出并解释它,我将不胜感激。谢谢

在此处输入图像描述

4

1 回答 1

2

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

template <char *> struct Foo { };

char x;

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

关键是它x现在是一个定义明确、命名的对象,带有链接,所以它的地址是一个全局的、静态已知的量。从字符串文字派生的指针不具有相同的性质;它不是命名变量的地址。

于 2013-09-15T22:39:48.293 回答