Sono curioso di sapere se è possibile garantire in fase di compilazione che un metodo venga chiamato esattamente in un unico posto.
Si noti che è OK se la funzione viene chiamata più di una volta (ad esempio in un ciclo), ma non dovrebbe essere chiamata in due cicli separati.
Questo può essere suddiviso in due parti, sono anche interessato a soluzioni che coprono entrambe le parti:
(a) assicurarsi che un metodo sia chiamato in almeno un posto
(b) assicurarsi che un metodo sia chiamato al massimo in un posto
Ho il pieno controllo della struttura del codice e sono benvenuti diversi modi di dire che ottengono la stessa idea.
// class.h
class MyClass {
public:
void my_method();
}
Non compilare (mai chiamato) quanto segue
#include "class.h"
int main() {
MyClass my_class;
}
Non compilare quanto segue (chiamato in più di un posto)
#include "class.h"
int main() {
MyClass my_class;
my_class.my_method();
while(true) {
my_class.my_method();
}
}
Il seguente dovrebbe compilare (chiamato esattamente in un posto):
#include "class.h"
int main() {
MyClass my_class;
while(true) {
my_class.my_method();
}
}
__COUNTER__macro non standard . Qualcosa del genere static_assert(__COUNTER__ == 0); my_class.my_method();. Tuttavia, il contatore si reimposta in ciascuna unità di traduzione in modo da poter verificare che la funzione venga chiamata una sola volta per unità di traduzione.