首先,如果不知道什么是內部類InnerClass的話,就沒必要往下看了。
嘗試在C++中模仿apple objective-c 的Grand Dispatch簡化多線程編程時,使用了boost::function,線程池,和內部類技術,需要在內部類訪問外部類的私有成員,由於標准的C++不允許這么做,內部類只能訪問外部類的公有成員,為了完成設計,只好將外部類的所有成員定義成public。
在C++11中,終於允許內部類訪問外部成員的私有變量了,因此外部類中的private和public可以放心使用了。
下面是使用XE7做的測試代碼,由於XE7中32bit還是用的BCC編譯器,不支持C++11,而只有64bit才支持C++11。因此,同樣的代碼,分別在32bit和64bit編譯,一個不能通過,一個編譯成功。
在64bit下編譯成功,運行結果:
然而在32bit下編譯,BCC報錯:無法訪問私有變量: