在C++中,是否可以让一个类继承自其中一个成员类?

Shu*_*hum 2 c++ inheritance

以下代码无法编译,因为编译器不知道foo::bar它何时遇到它.

class foo : foo::bar {
    class bar {
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个代码(或它的一些变体)编译?

chw*_*arr 7

如果继承来自bar实现细节,并且目标是避免污染全局命名空间(或库的命名空间),则通常的方法是将这些实现细节放在名为的命名空间中detail.例如,这是像Boost这样的库中使用的约定.

namespace super_cool_library {

    namespace detail {
        class bar { };
    }

    class foo : detail::bar {
    };

}
Run Code Online (Sandbox Code Playgroud)

detail命名空间是无可否认,只是一个约定,但大多数人都明白,在所述命名空间有怪物.

编辑:

由于埃米利奥加拉瓦利亚表明,foo需要交好detail::bar是否detail::bar应该需要有相同的访问foo是一个C++ 11的内部类会有.