Tengo curiosidad por saber si es posible garantizar en tiempo de compilación que un método se llame exactamente en un lugar.
Tenga en cuenta que está bien si la función se llama más de una vez (por ejemplo, en un bucle), pero no se debe llamar en dos bucles separados.
Esto se puede dividir en dos partes, también estoy interesado en las soluciones que cubren cualquiera de las partes:
(a) asegurar que se llame a un método en al menos un lugar
(b) asegurar que se llame a un método en un lugar como máximo
Tengo control total sobre la estructura del código, y son bienvenidos diferentes modismos que logran la misma idea.
// class.h
class MyClass {
public:
void my_method();
}
Lo siguiente no debe compilarse (nunca llamado)
#include "class.h"
int main() {
MyClass my_class;
}
Lo siguiente no debe compilarse (llamado en más de un lugar)
#include "class.h"
int main() {
MyClass my_class;
my_class.my_method();
while(true) {
my_class.my_method();
}
}
Lo siguiente debe compilarse (llamado exactamente en un lugar):
#include "class.h"
int main() {
MyClass my_class;
while(true) {
my_class.my_method();
}
}
__COUNTER__macro no estándar para hacer esto. Algo así como static_assert(__COUNTER__ == 0); my_class.my_method();. Sin embargo, el contador se reinicia en cada unidad de traducción, por lo que solo puede verificar que la función se llame una vez por unidad de traducción.