Bar
次の設定で、派生クラス内の名前を参照できるようにするにはどうすればよいDerived<T>
ですか?
template <typename T> struct Foo
{
template <typename U> struct Bar { };
};
template <typename T> struct Derived : Foo<T>
{
// what goes here?
Bar<int> x; // Error: 'Bar' does not name a type
};
試してみましusing Foo<T>::Bar;
たが、役に立ちません。using
単純な宣言を維持できるように、ネストされた基本テンプレートの名前を派生クラスに知らせることができる宣言はありBar<int> x
ますか?
と言えることはわかっていますがtypename Foo<T>::template Bar<int> x;
、そのようなケースがたくさんあるので、コードに不必要に冗長な負担をかけたくありません。また、個別の " int
s" も多数あるため、typedef
ネストされたテンプレート インスタンスごとに for each を使用することもできません。
また、現時点では GCC 4.7 も C++11 も使用できないため、テンプレート エイリアスのない「従来の」ソリューションが必要です。