无法将宏定义传递给基类

let*_*ite 3 c++ c++14

基类在创建派生类对象时无法查看派生类中定义的宏.[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标志编译代码就不可能做到这一点?

Bar*_*rry 7

首先,不要使用宏.

其次,SKIP将在Base处理类声明时检查定义的内容 - 而不是在处理类声明时Derived,所以如果你#define在哪里,那就太晚了.你需要提前做到这一点:

#define SKIP
#include "Base.hpp"

class Derived : public Base { ... };
Run Code Online (Sandbox Code Playgroud)

但是确保SKIP在每次包含之前定义或不定义相同的方式Base,或者是ODR违规.或者只是在命令行上定义它.

但是,实际上,不要使用宏.通过一个bool.