27

名前空間をテンプレートパラメータにすることはできないことを理解しています。「名前空間に特化したテンプレート」という質問を参照してください。

与えられた:

namespace A {
  class Foo;
  class Bar;
}

namespace B {
  class Foo;
  class Bar;
}

A名前空間または次のようにクラスをテンプレート化したいB

template<name> class C {
  name::Foo* foo;
  name::Bar* bar;
};

なぜそうなのかと思っていました。テンプレートは構造体ではないことは理解していますが、コンパイラーの設計に技術的な制限はありますか?または、この機能を実装するための重要なトレードオフがありますか?

4

2 に答える 2

28

Bjarne Stroustrup が最初に C++ 標準会議でテンプレートについて話し始めたとき、彼は名前空間をテンプレート パラメーターとして言及しました。名前空間自体が非常に新しいものであり、理解できない 2 つのことを組み合わせることを恐れていたため、反応は懐疑的でした。

于 2012-10-16T15:46:57.633 に答える
15

これは:

  1. (IMO) 不適切: 名前空間は名前の衝突を回避します。ポリモーフィズムは彼らの憲章の外にあります。
  2. 不要: 構造体でまだ実行できないことは何も達成しません。
  3. おそらく難しい: 名前空間は、完全な自己完結型のエンティティではありません。名前空間のさまざまなメンバーを、さまざまなヘッダーやさまざまなコンパイル ユニットで宣言できます。
于 2012-10-16T00:42:17.523 に答える