我可以在此类的嵌套类中填充模板参数吗?

时间:2018-12-11 10:52:15

标签: c++ c++11

例如,我有一个看起来像这样的班级:

template <typename T>
class Test {
 public:
  T* t;
   ...
};

然后(如何)我可以扩展类似于此类的课程?

class TestImplement : Test<TestImplement::TestInner> // the TestInner class is defind in the class {
  class TestInner {};
  ...
};

由于TestInner是在模板需要的位置之后定义的,因此此代码是非法的,并且前向声明也没有用。

1 个答案:

答案 0 :(得分:2)

好吧,您根本无法做到这一点,并且您已经指出了原因。

更多地考虑逻辑而不是语法,这是因为基类定义可能取决于模板参数的不同而非常不同,并且由于基类定义可能非常影响TestInner的工作方式,因此您正在尝试创建循环依赖,这在我们的物理现实中是不可能的。

您可以尝试使用TestImplement作为模板参数(CRTP!),然后从基本内容中查找typename TemplateArgument::TestInner,但是即使这样做有效,我也不清楚其清晰度。

我会改用非嵌套类。