我有一个接口,其中每个函数的内容都是用一个大宏创建的。如果程序员正在添加一个新函数,并忘记将该函数添加到接口类中,它会创建很多编译错误,这会使实际错误分心。如何在编译时声明一个函数是特定类的成员
在编译时断言是否可以使用这个特定宏的函数是特定类的成员? 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此外,似乎我使用的编译器没有这种问题的警告。 –