基类在创建派生类对象时无法查看派生类中定义的宏.[C++ 14]
Base.HPP
class Base {
public:
Base() {
#ifndef SKIP
std::cout << "Bing" << std::endl;
#endif
}
};
Run Code Online (Sandbox Code Playgroud)
文件:Derived.HPP
#define SKIP
class Derived : public Base {
public:
Derived() {}
};
Run Code Online (Sandbox Code Playgroud)
因此,每当我创建Derived类的对象时,我都希望不会Bing在输出终端中看到它,因为我已经定义了宏SKIP.
但这不会发生.似乎Base类对宏的定义一无所知SKIP.有没有办法做到这一点,或者如果不用-DSKIP标志编译代码就不可能做到这一点?
首先,不要使用宏.
其次,SKIP将在Base处理类声明时检查定义的内容 - 而不是在处理类声明时Derived,所以如果你#define在哪里,那就太晚了.你需要提前做到这一点:
#define SKIP
#include "Base.hpp"
class Derived : public Base { ... };
Run Code Online (Sandbox Code Playgroud)
但是确保SKIP在每次包含之前定义或不定义相同的方式Base,或者是ODR违规.或者只是在命令行上定义它.
但是,实际上,不要使用宏.通过一个bool.
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |