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

Disable inheriting from base class in C++ in release mode

本文关键字:C++ 继承 基类 布模式 模式      更新时间:2023-10-16

我想为我的类使用抽象基类。这些抽象类将用于接口的目的。。它们只是作为一种自我检查,以确保所有必要的成员都得到了实现。这加快了开发速度。由于错误消息比从模板中生成的错误消息要干净得多。

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

是否有一些预处理器的魔力允许我仅在定义了调试符号的情况下从这些抽象接口类继承?

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

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中的接口。如果未定义它,则派生对象将不会继承抽象。