C++ 中嵌套类常用在哪些场合

一般叫nested class吧……好处:一个private的nested class隐藏了实现细节,适合那些绝对不会暴露在外的部分。比起其它解决方案(namespace detail等) ,封装的更为彻底。其中比较具有代表性的就是pimpl惯用法了:class Aclass A { class Imp; Imp* impl; public: A(); virtual ~A(); void interface();};class A::Imp{ public: void some_dirty_work() { //... }};A::A() : impl(new Imp) { }A::~A() { delete impl; }void A::interface() { impl-\u0026gt;some_dirty_work() }nested class清晰地表明了从属关系,如linked_list::node,比起两个单独的linked_list和node类更清楚。缺陷:nested class的编译器bug比较多,如果用旧版本的编译器要小心代码的连贯性在nested class复杂的情况下会下降,这个例子:class A { private: int member1, member2; // continue reading: public: class B { //100+ lines // //... }; class C { //100+ lines // //... class CX { //100+ lines }; }; B b; C c; void foo() { memberX.bar(); } //What is memberX?};如果类B要对外使用,A::B的形式对于用户(特别是在有自动补全的情况下)非常不方便。应该使用有共同前缀的类名+A类内typedef B类取出前缀名的形式:class SyntaxTree;class SyntaxNode //exposed to user{ //...};class SyntaxTree{ public: typedef SyntaxNode Node; //...};


    推荐阅读