【问题标题】:C++ How to ignore defined method in header file?C ++如何忽略头文件中定义的方法?
【发布时间】:2013-10-25 17:10:15
【问题描述】:

我希望编译器 (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 注释。

感谢您提出如何解决该问题的想法;)

【问题讨论】:

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


    【解决方案1】:
    void methodA(int) = delete; // note: requires C++11
    void methodA(double);
    

    如果您尝试使用methodA(int),将导致编译器错误,但如果您尝试使用methodA(double),则不会。

    【讨论】:

    • 如果我尝试在宏中使用该方法会给出变体 (a) 错误?
    • @AndreasBf 如果宏被扩展并导致编译器看到函数调用,那么当然可以。
    • 好的,所以我不能用你的提示写 ------#define XYZ(a) ""#a-------?
    • 顺便说一句:QT 对信号使用注释:编译时注释在做什么?当我使用 QTs 定义时,我收到很多警告“注释属性指令被忽略 [-Wattributes]”
    【解决方案2】:

    找到了一种方法来忽略我想要做的方法:

    #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 传递:) 感谢您的提示

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      • 2021-01-07
      • 1970-01-01
      • 2012-05-05
      • 2015-03-31
      相关资源
      最近更新 更多