C ++如何忽略头文件中定义的方法?

时间:2013-10-25 17:10:16

标签: c++ compiler-construction header annotations g++

我想要一个编译器(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注释。

感谢您如何解决这个问题;)

2 个答案:

答案 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 :) 感谢您的提示