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