在考虑奇怪问题的"创造性"(即奇异)解决方案时,一个特定的想法引发了我的好奇心.这不是我可能会使用的想法,但我仍然想知道它是否符合标准是合法的.
一个简单的例子就是......
class base_t
{
private:
// stuff
public:
// more stuff
class derived_t : public base_t // <--- weirdness here
{
// ...
};
};
Run Code Online (Sandbox Code Playgroud)
奇怪的一部分 - 从derived_t
继承base_t
包含derived_t
,它似乎derived_t
包含自己.
那么 - 这是一个有效但奇怪且可怕的事情,类似于奇怪的反复出现的模板模式,还是非法的?
编辑 - 我或许应该提到我之所以想到这个原因是为了避免一些命名空间污染.将类作为成员避免引入另一个全局类,但第二个类需要从第一个类共享很多.
如果它只是一对类,那就不是问题,但这是代码生成器.
这是合法的,但也许不是你安排代码的方式.基类必须在使用时完成,但直到定义的结束括号.因此,请尝试向前声明嵌套类:
class base_t
{
private:
// stuff
public:
// more stuff
class derived_t;
};
class base_t::derived_t : public base_t
{
// ...
};
Run Code Online (Sandbox Code Playgroud)