無名クラス
http://www.geocities.jp/ky_webid/cpp/language/030.html
内部クラスを定義するときに、名前を省略すると無名クラスというものになります。
例を見た方が早いですね、実装してみます。
#include <iostream> using namespace std; class COuter { public: class { public: int m_num; }; COuter(int num) : m_num(num) {} int Get () const { return m_num; } }; int main() { COuter obj(333); cout << obj.Get() << endl; return 0; }
$ main 333
無名クラスには名前がないのでインスタンス化ができません。またメンバ関数も作れません。またアクセス指定子にはpublicしか指定できません。もしprivateにしてしまうとメンバ変数にアクセスする手段がないからです。
メンバ変数しか登録できなくてpublicしか指定できないのならstructでもまったく同じ処理になります。
class COuter { public: struct { int m_num; }; COuter(int num) : m_num(num) {} int Get () const { return m_num; } };
しかし、これ何の役に立つんでしょうか。まったく想像できません。
更に言えばVC2008の環境では無名クラスを使うと警告がでます。
main.cpp(9) : warning C4201: 非標準の拡張機能が使用されています : 無名の構造体または共用体です。
ということで、こういうものがあるということだけ知っておきましょう。