例如,我有一个看起来像这样的班级:
template <typename T>
class Test {
public:
T* t;
...
};
然后(如何)我可以扩展类似于此类的课程?
class TestImplement : Test<TestImplement::TestInner> // the TestInner class is defind in the class {
class TestInner {};
...
};
由于TestInner
是在模板需要的位置之后定义的,因此此代码是非法的,并且前向声明也没有用。
答案 0 :(得分:2)
好吧,您根本无法做到这一点,并且您已经指出了原因。
更多地考虑逻辑而不是语法,这是因为基类定义可能取决于模板参数的不同而非常不同,并且由于基类定义可能非常影响TestInner
的工作方式,因此您正在尝试创建循环依赖,这在我们的物理现实中是不可能的。
您可以尝试使用TestImplement
作为模板参数(CRTP!),然后从基本内容中查找typename TemplateArgument::TestInner
,但是即使这样做有效,我也不清楚其清晰度。
我会改用非嵌套类。