【发布时间】:2022-01-19 01:45:53
【问题描述】:
我想要一个具有嵌套类的模板。然后我想要一个模板,它继承了第一个模板,也有一个嵌套类。然后我希望这个嵌套类继承他的所有者基嵌套类。我可以做到,但我不能从另一个访问第一个嵌套类的成员。我做错了什么,或者根本不可能?为什么?我该怎么做才能解决问题(如果可能)/替代决定(如果不可能)?
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?
}
};
【问题讨论】:
-
我尝试编译您的示例并收到以下错误:
circular inheritance between 'Class2<T>::NestedClass2' and 'Class2::NestedClass2'您的问题可以通过将NestedClass2定义为:class Class2<T>::NestedClass2 final : Class1<T, int>::NestedClass1我不知道您的示例到底出了什么问题但我认为这与在:的两侧使用Class2有关,即在基础部分和子部分。 -
@mix 哪个编译器会产生这个错误?
-
Clang 见:https://godbolt.org/z/c6Trc593h
-
看起来 Clang 要求您编写如下内容:
class Class2<T>::NestedClass2 final : Class2<T>::template Class1<T,int>::NestedClass1。 Demo
标签: c++ templates inheritance inner-classes