我有一個接口,其中每個函數的內容都是用一個大宏創建的。如果程序員正在添加一個新函數,並忘記將該函數添加到接口類中,它會創建很多編譯錯誤,這會使實際錯誤分心。如何在編譯時聲明一個函數是特定類的成員
在編譯時斷言是否可以使用這個特定宏的函數是特定類的成員? C++ 03或Boost功能可用。
#define MACRO_OF_THE_DOOM(...) assertion_here(); do_something();
class A {
void functionA();
void functionB();
};
// This is valid usage
void A::functionA() {
MACRO_OF_THE_DOOM(1, 2, 3, 4, 5);
}
// This should give an understandable compile error, which tells
// definition should be A::functionB()
void functionB() {
MACRO_OF_THE_DOOM(6, 7, 8);
}
所以這樣做的真正原因是你在實現它們的時候會忘記用'A ::'作爲前綴的函數嗎?你有沒有嘗試' - 牆'? –
@BartekBanachewicz在這種情況下,我認爲static assert會比'-Wall'更好,因爲在編譯器警告之前會顯示編譯錯誤。我也對這是否在理論上可能與靜態斷言有關感興趣。 –
@BartekBanachewicz此外,似乎我使用的編譯器沒有這種問題的警告。 –