无法将宏定义传递给基类
Unable to pass macro definition to base class
基类无法在创建派生类对象时查看派生类中定义的宏。[C++14]
碱性HPP
class Base {
public:
Base() {
#ifndef SKIP
std::cout << "Bing" << std::endl;
#endif
}
};
文件 : 派生.HPP
#define SKIP
class Derived : public Base {
public:
Derived() {}
};
因此,每当我创建派生类的对象时,我都不希望在输出终端中看到Bing
,因为我已经定义了宏SKIP
。
但这不会发生。基类似乎对宏SKIP
的定义一无所知。有没有办法做到这一点,或者如果不使用-DSKIP
标志编译代码,这是不可能的?
首先,不要使用宏。
其次,SKIP
将在处理Base
的类声明时检查定义性 - 而不是在处理Derived
的类声明时,所以如果你#define
它的位置,那就太晚了。您需要更早地执行此操作:
#define SKIP
#include "Base.hpp"
class Derived : public Base { ... };
但是请确保在每次包含Base
之前以相同的方式定义或不定义SKIP
,否则这是违反 ODR 的。或者只是在命令行上定义它。
但是,实际上,不要使用宏。传递bool
.
您可以使用模板而不是宏:
template<bool skip>
struct Base {};
template<>
struct Base<false> {
Base() {
std::cout << "Bing" << std::endl;
}
};
然后,在创建Derived
类时,执行以下操作:
struct Derived : Base<true> {};
如果将true
作为模板参数,它将选择输出Bing
的其他基类。
相关文章:
- 使用子类覆盖基类中定义的函数
- 如何在基类中定义静态接口,并确保该接口必须在派生类中实现
- Qt基类函数定义
- 当在基类中定义枚举时,qml中的Q_ENUM未定义值
- 基类未定义.错误 C2504
- 从派生类重新定义基类中定义的结构
- boost::bind 无法绑定到纯虚拟基类中定义的非静态函数模板成员类型
- C++头文件错误:基类未定义
- 在基类中定义的调用函数
- IMFSourCereadErcallback:基类未定义
- 类类型重定义和基类未定义错误
- 使用基类中定义的函数返回指向派生类实例的指针时发生无效转换错误
- C 中的基类未定义错误
- 错误C2504-基类未定义
- 派生类无法访问私有成员(尽管构造函数是在基类中定义的)
- 当后代需要不同的参数列表时,我应该如何在基类中定义抽象方法
- 继承基类,定义基类的原型方法,但从第三个对象调用子类的方法
- 可以强制从抽象基类继承的类只在基类中定义公共方法吗
- 从c++中的派生类调用未在基类上定义的成员函数是否安全
- 基类未定义的 Visual Studio 2010