2017-05-29 3 views
-1

私はコンパイル時に定義されているマクロと定義されていないマクロROOF_EXISTSを持っています。特定のマクロが定義されていると、さらにクラスを継承する

マクロは現在、クラスは次のように継承するかしないかどうかを示すために使用されます。

#ifdef ROOF_EXISTS 
class building : public door, public roof, public window 
#else 
class building : public door, public window 
#endif 

私はまた、それらが定義されている場合、追加のクラスを追加する2つの以上のマクロを追加します。 しかし、私がそれをすると、すぐにたくさんのコピーと貼り付けと指数関数的なコードの増加に遭遇し、これは面倒です。

継承する必要があるクラスを条件付きで追加(または削除)するマクロを使用する明確な方法はありますか?

+6

。代わりにvariadicテンプレートを使用してみませんか?実際に目的は何ですか? –

+6

私はあなたがこれについて正しいことをしているとは思わない。継承は「is-a」関係を表します。なぜ建物は窓ですか?なぜ建物はドアですか? –

+1

あなたのデザインに何か問題があると思います。継承は "isa"関係をカプセル化します。建物はドアではありません –

答えて

-3

あなたがこれを行うことができます:

ひどいデザインのように見える
class Test: public A 
#ifdef TEST 
, public B 
#else 
, public C 
#endif 
{ 
}; 
+1

ありがとう!それはまさに私が探していたものです。 – user43825

+2

@ user43825 _「それはまさに私が探していたものです。」_私はそう思っていますが、よく... –

関連する問題