-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

短い答えは、「標準がそう言っているからです」です。テンプレート引数はtypeを形成するのに役立つため、十分に明確でなければなりません。ただし、次のように動作します。

template <char *> struct Foo { };

char x;

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

要点はx、これはリンケージを持つ明確に定義された名前付きオブジェクトであるため、そのアドレスはグローバルで静的に既知の量です。文字列リテラルから派生したポインターには、同じ性質はありません。名前付き変数のアドレスではありません。

于 2013-09-15T22:39:48.293 に答える