我想要一个编译器(MinGW g ++ / Linux g ++)忽略头文件中的一些定义的东西:
class A {
public:
A();
virtual ~A();
IGNORE void methodA(); // = 0 -> not possible
IGNORE void methodB(); // = 0 -> not possible
}
问题:methodA()和methodB()不能是纯虚拟的,因为该类稍后会被实例化,因此它会产生编译错误。这样做的原因是:我希望有一个可读的头文件,所以这个方法应该出现在文件中 - 这些方法只在QT框架中用作“信号”,它们被转换为带有宏的字符串。 也许可以声明一个宏让它作为注释?我在QT5框架中看到了这个(声明的信号方法)但它不能用我的代码...... 我不想做的事情:仅将方法列为DOC注释。
感谢您如何解决这个问题;)
答案 0 :(得分:2)
void methodA(int) = delete; // note: requires C++11
void methodA(double);
如果您尝试使用methodA(int)
,将导致编译器错误,但如果您尝试使用methodA(double)
则不会。
答案 1 :(得分:0)
找到一种方法来忽略我想要做的所描述的方法:
#define IGNORE __attribute__((unused))
#define METHOD_TO_STRING(a) ""#a
所以我可以写头文件
class A {
public:
IGNORE void methodA();
void doStuff(const char *stuff);
void methodB() {
doStuff(METHOD_TO_STRING(methodA());
}
};
现在编译器很高兴,我可以传递方法作为args :) 感谢您的提示