2017-05-29 77 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

这看起来像一个可怕的设计。为什么不使用可变模板呢?实际上的目的是什么? –

+6

我不认为你会这样做。继承描述了一种“是 - 一种”关系。为什么建筑物是一扇窗户?为什么建筑是一扇门? –

+1

我认为你的设计有问题。继承封装了“isa”关系。建筑物不是门 –

回答

-3

你可以这样做:

class Test: public A 
#ifdef TEST 
, public B 
#else 
, public C 
#endif 
{ 
}; 
+1

谢谢!这正是我所期待的。 – user43825

+2

@ user43825 _“那正是我在找的东西。”_我很怀疑,但是... –