Ich habe eine Schnittstelle, in der der Inhalt jeder Funktion mit einem großen Makro erstellt wird. Wenn ein Programmierer eine neue Funktion hinzufügt und vergisst, diese Funktion der Schnittstellenklasse hinzuzufügen, erzeugt er viele Kompilierungsfehler, die von dem tatsächlichen Fehler ablenken.Wie zur Kompilierzeit behaupten, dass eine Funktion Mitglied der spezifischen Klasse ist
Wäre es möglich, zur Kompilierzeit zu behaupten, dass eine Funktion, die dieses bestimmte Makro verwendet, Mitglied einer bestimmten Klasse ist? C++ 03 oder Boost-Funktionen sind verfügbar.
#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);
}
Der wirkliche Grund dafür ist, dass Sie vergessen, Ihre Funktionen mit "A ::" zu versehen, wenn Sie sie implementieren? Hast du "-Wall" probiert? –
@BartekBanachewicz Ich denke, statische Assert wäre in diesem Fall besser als "-Wall", weil Kompilierungsfehler vor Compiler-Warnungen angezeigt werden. Mich interessiert auch, ob dies theoretisch mit einem statischen Assert möglich wäre. –
@BartekBanachewicz Außerdem scheint der Compiler, den ich verwende, keine Warnung für diese Art von Problem zu haben. –