質問: false; /* taroとhanakoのメンバ変数を比較して、同じだったら「一緒だね!」と表示したい */ return 0; } ``` (もちろん話をデフォルメしております) ここで、taroとyukiのメンバ変数の比較は、数が少なければ if をたくさん書けば済みますが(上記の例なら3つ)、 実際にはメンバ変数の数が20個以上あって型もマチマチだと思ってください。 このようなとき、 if を20個書かずにスマートに解決したいです。下のような感じで。 ``` for (int i=0; i < Human.itemsNum(); i++) { if (taro.item[i] != yuki.item[i]){ cout << "一緒だね!" << endl; } } ``` また訳あってC++11は使用不可です。。。 何か良い方法はございますでしょうか。 よろしくお願い申し上げます。
回答: > > C++で、クラスのメンバ変数にforループでアクセスする方法はあるでしょうか > > > (Chironianさん回答と同じですが)C++言語ではリフレクションをサポートしないため、素直な方法では不可能です。 Boost.Fusionライブラリを用いれば、似たようなことを実現できますが、本当にその方法が好ましいかは状況次第かと思います。 > > ここで、taroとyukiのメンバ変数の比較は、[...] > > このようなとき、 if を20個書かずにスマートに解決したいです。 > > > 構造体同士の等値比較を行いたいのであれば、`operator==`演算子オーバーロードを定義するのが自然です。同関数定義では結局メンバ変数を列挙しないといけませんが、利用側コードはすっきりします。 ``` // クラス定義 struct Human { Sex sex; int age; bool married; bool operator==(const Human& a, const Human& b) { return (a.sex == b.sex) && (a.age == b.age) && (a.married == b.married); } }; // 利用側コード Human taro, yuki; ... if (taro == yuki) {...} ```