基类不能在创建派生类对象时查看派生类中定义的宏。 [C++ 14]无法将宏定义传递到基类
Base.HPP
class Base {
public:
Base() {
#ifndef SKIP
std::cout << "Bing" << std::endl;
#endif
}
};
文件:Derived.HPP
#define SKIP
class Derived : public Base {
public:
Derived() {}
};
所以,每当我创建派生类的对象我不希望看到在Bing
输出终端,因为我已经定义了宏SKIP
。
但是这不会发生。看起来基类对宏观的定义很无知SKIP
。有没有办法做到这一点,或者这是不可能做到这一点,没有与-DSKIP
国旗编译代码?
不要使用宏? – Barry
包含文件通常只处理一次,因此如果在处理该点时没有定义SKIP,则不会显示“Bing”。 –
宏在编译器查看代码之前进行文本替换。如果你制作[mcve],人们可能会帮助你,现在我们甚至无法判断'#include'ing * Base.HPP *之前或之后'#define'd'SKIP'是否重要。此外,您可能正在违反[ODR](https://stackoverflow.com/questions/4192170),并正在前往[UB](https://stackoverflow.com/documentation/c%2b%2b/1812/)未定义的行为#吨= 201702271913219429673)。 – nwp