禁用在发布模式下从C ++中继承基类

时间:2015-04-10 19:57:00

标签: c++ c-preprocessor release base-class

我想为我的类使用抽象基类。这些抽象类将用于接口的目的..它们仅作为自我检查以确保实现所有必需的成员。这加速了开发。由于错误消息比从模板生成的onces更清晰。

由于我将在模板中使用实现类,因此在发布版本中不需要基类本身。实际上,它只会引入开销,即使它很小。

是否有一些预处理器魔法只允许我在定义调试符号时从这些抽象接口类继承?

1 个答案:

答案 0 :(得分:6)

您可以使用模板隐藏宏的一些混乱。

template <bool UseAbstractBase> class BaseT;

template <>
class BaseT<true> : public AbstractBase {};

template <>
class BaseT<false> {};

#ifndef USE_ABSTRACT_BASE
#define USE_ABSTRACT_BASE false
#endif

class Derived : BaseT<USE_ABSTRACT_BASE> {
    //...
};

现在,如果您将USE_ABSTRACT_BASE定义为true,您的派生对象将采用AbstractBase中的接口。如果保留未定义,则派生对象将不会继承抽象。