在以下设置中,我怎样才能使我可以引用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
每个嵌套模板实例的一个也不可行。
另外,此时我不能使用 GCC 4.7 也不能使用 C++11,因此我想要一个没有模板别名的“传统”解决方案。