c++ - 在 Release模式下禁用从 C++ 中的基类继承

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

我想为我的类使用抽象基类。这些抽象类将服务于接口(interface)的目的。它们只是作为一种 self 检查来确保所有必要的成员都已实现。这加快了开发速度。由于错误消息比模板生成的错误消息要清晰得多。

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

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

最佳答案

您可以使用模板隐藏一些困惑的宏。

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

关于c++ - 在 Release模式下禁用从 C++ 中的基类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29569708/

相关文章:

C++ 将带有十六进制字符的 .txt 转换为带有\x 的十六进制字符的 .text

c++ - 用C/C++在Linux中读取内核信息

c - 如何将字符串与带有点的 C 预处理器连接起来?

git - Gradle bitbucket/git 发布插件

c++ - 基本的 C++ 类如何用 Objective C 实现

c++ - 堆栈和队列

c - 如何在 C 中解析链接的宏?

有条件地定义 C 函数宏

python 或 pyqt - 检查鼠标按钮的点击状态

c++ - 如果调试运行正常但发布崩溃怎么办