getter-setterのデフォルトの実装にテンプレートを使用することができます。
たとえば、http://www.kirit.com/C%2B%2B%20killed%20the%20get%20%26%20set%20accessors/A%20simple%20meta-accessor。最も重要なことは、このようなセッターまたはゲッターのデフォルトの動作をオーバーライドする場合、セッターゲッターの呼び出し構文はメソッドの呼び出しと同じであるため、「クライアント」コードを変更せずに簡単にこれを実行できることです。
an_object.an_int( 3 );
int i = an_object.an_int();
どちらの場合も、an_intはoperator()またはan_objectのメソッドを持つオブジェクトにすることができます。オーバーライドした後、「クライアント」コードで再コンパイルが必要になります。
しかし、プリプロセッサマクロなしでgetter-setterの「仮想」デフォルト実装を定義することは可能ですか?つまり、ここで重要なことは、オーバーライド中に「クライアント」コードを再コンパイルする必要がないということです。もちろん、プリプロセッサで行うことは可能ですが、もっとエレガントな解決策はありますか?
私のC++03の知識は不可能ですが、誰かがアイデアを持っているのでしょうか、それともC ++ 11で可能でしょうか?
「DavidRodríguez--dribeas」に対する回答:次のようなもの:
#define accessor(type,name) \
virtual type name() {return m_##name;} \
type m_##name;
「クライアント」コードを再コンパイルすることなく、派生クラスでオーバーライドできます。