访问类中的基成员,该基成员派生自模板类中的嵌套类



我想要一个有嵌套类的模板。然后我想要一个模板,它继承了第一个模板,并且还有一个嵌套类。然后我希望这个嵌套类继承他的所有者基础嵌套类。我可以这样做,但我不能从另一个类访问第一个嵌套类的成员。我做错了什么,还是根本不可能?为什么?我该怎么做才能解决问题(如果可能(/做出替代决定(如果不可能(?

template <class T, class T2>
class Class1
{
public:
class NestedClass1;
};
template <class T, class T2>
class Class1<T, T2>::NestedClass1
{
public:
void Do()
{
}
};
template <class T>
class Class2 : Class1<T, int>
{
public:
class NestedClass2;
};
template <class T>
class Class2<T>::NestedClass2 final : Class2<T>::NestedClass1
{
public:
void Do2()
{
this->Do(); // Why there is no "Do" in this?
}
};

您的代码似乎在流行的编译器上编译得不太好:

template <class T>
class Class2<T>::NestedClass2 final : Class2<T>::NestedClass1

关于它,clang抱怨Class2中没有任何NestedClass1。从技术上讲,继承的嵌套类也是嵌套类,然而clang在所述上下文中不同意,使用clang的代码库构建的工具也不同意。

以下是适用于所有三个主要编译器的变通方法:

template <class T>
class Class2<T>::NestedClass2 final : Class1<T, int>::NestedClass1

最新更新