在发布模式下禁用从 C++ 中的基 class 继承
Disable inheriting from base class in C++ in release mode
我想为我的 classes 使用抽象基础 classes。这些抽象 classes 将用于接口的目的。它们只是作为一种自我检查来确保所有必要的成员都已实现。这加快了开发速度。由于错误消息比模板生成的错误消息要清晰得多。
因为我要在模板中使用实现 classes,所以在发布版本中不需要基础 class 本身。事实上,它只会引入开销,即使它很小。
是否有一些预处理器魔术允许我从这些抽象接口继承class仅当定义了调试符号时?
您可以使用模板隐藏一些混乱的宏。
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
的接口。如果您未定义它,您的派生对象将不会继承抽象。
我想为我的 classes 使用抽象基础 classes。这些抽象 classes 将用于接口的目的。它们只是作为一种自我检查来确保所有必要的成员都已实现。这加快了开发速度。由于错误消息比模板生成的错误消息要清晰得多。
因为我要在模板中使用实现 classes,所以在发布版本中不需要基础 class 本身。事实上,它只会引入开销,即使它很小。
是否有一些预处理器魔术允许我从这些抽象接口继承class仅当定义了调试符号时?
您可以使用模板隐藏一些混乱的宏。
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
的接口。如果您未定义它,您的派生对象将不会继承抽象。