Derleme zamanında bir yöntemin tam olarak tek bir yerde çağrılmasını sağlamanın mümkün olup olmadığını merak ediyorum.
İşlev bir kereden fazla çağrıldığında (örn. Bir döngüde) TAMAM olduğunu unutmayın - ancak iki ayrı döngüde çağrılmamalıdır.
Bu iki parçaya ayrılabilir, ben de her iki parçayı da kapsayan çözümlerle ilgileniyorum:
(a) bir yöntemin en az bir yerde
çağrılmasını sağlamak (b) bir yöntemin en fazla bir yerde çağrılmasını sağlamak
Ben kodun yapısı üzerinde tam kontrole sahip ve aynı fikri elde farklı deyimler bekliyoruz.
// class.h
class MyClass {
public:
void my_method();
}
Aşağıdakiler derlenmemelidir (asla çağrılmamalıdır)
#include "class.h"
int main() {
MyClass my_class;
}
Aşağıdakiler derlenmemelidir (birden fazla yerde çağrılır)
#include "class.h"
int main() {
MyClass my_class;
my_class.my_method();
while(true) {
my_class.my_method();
}
}
Aşağıdakiler derlenmelidir (tam olarak tek bir yerde çağrılır):
#include "class.h"
int main() {
MyClass my_class;
while(true) {
my_class.my_method();
}
}
__COUNTER__yapmak için standart olmayan makroyu kullanabilirsiniz. Gibi bir şey static_assert(__COUNTER__ == 0); my_class.my_method();. Bununla birlikte, sayaç her çeviri biriminde sıfırlanır, böylece işlevin çeviri birimi başına yalnızca bir kez çağrıldığını kontrol edebilirsiniz.