2013-10-25 24 views
0

我想要一個編譯器(MinGW的克++/Linux的克++)忽略在頭文件中的一些定義的東西:C++如何忽略頭文件中定義的方法?

class A { 
    public: 
     A(); 
     virtual ~A(); 

    IGNORE void methodA(); // = 0 -> not possible 
    IGNORE void methodB(); // = 0 -> not possible 
} 

問題:了methodA()和的methodB()不能是純虛因爲類會稍後會被實例化,所以它會導致編譯器錯誤。這樣做的原因是:我想要一個可讀的頭文件,所以這個方法應該出現在文件中 - 這些方法只在QT框架中用作「信號」,這些信號用宏來轉換爲字符串。 也許可以聲明一個宏讓它作爲註釋嗎?我在QT5框架(聲明的信號方法)中看到了這一點,但它不能與我的代碼一起工作... 我不想做的事情:只將這些方法列爲DOC註釋。

感謝一個想法如何解決;)

回答

2
void methodA(int) = delete; // note: requires C++11 
void methodA(double); 

會導致編譯器錯誤,如果你曾經嘗試使用methodA(int),而不是如果你想使用methodA(double)

+0

如果我嘗試在宏中使用該方法,給出變體(a)錯誤? – Andreas

+1

@AndreasBf如果宏被擴展並導致編譯器看到函數調用,那麼當然是。 – Walter

+0

好的,所以我不能寫#定義XYZ(a)「」#a -------與你的提示? – Andreas

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 :) 感謝提示