Je suis curieux de savoir s'il est possible de garantir au moment de la compilation qu'une méthode est appelée exactement à un endroit.
Notez que c'est OK si la fonction est appelée plus d'une fois (par exemple dans une boucle) - mais elle ne doit pas être appelée dans deux boucles distinctes.
Cela peut être divisé en deux parties, je suis également intéressé par les solutions qui couvrent l'une ou l'autre partie:
(a) s'assurer qu'une méthode est appelée à au moins un endroit
(b) s'assurer qu'une méthode est appelée à au plus un endroit
J'ai un contrôle total sur la structure du code et les différents idiomes qui atteignent la même idée sont les bienvenus.
// class.h
class MyClass {
public:
void my_method();
}
Les éléments suivants ne doivent pas être compilés (jamais appelés)
#include "class.h"
int main() {
MyClass my_class;
}
Les éléments suivants ne doivent pas être compilés (appelés à plusieurs endroits)
#include "class.h"
int main() {
MyClass my_class;
my_class.my_method();
while(true) {
my_class.my_method();
}
}
Les éléments suivants doivent être compilés (appelés exactement à un endroit):
#include "class.h"
int main() {
MyClass my_class;
while(true) {
my_class.my_method();
}
}
__COUNTER__macro non standard pour ce faire. Quelque chose comme static_assert(__COUNTER__ == 0); my_class.my_method();. Cependant, le compteur est réinitialisé dans chaque unité de traduction, vous ne pouvez donc vérifier que la fonction est appelée une fois par unité de traduction.