Saya ingin tahu apakah mungkin untuk memastikan pada waktu kompilasi bahwa suatu metode dipanggil tepat di satu tempat.
Perhatikan bahwa tidak apa-apa jika fungsi dipanggil lebih dari satu kali (misalnya dalam satu lingkaran) - tetapi tidak boleh dipanggil dalam dua loop terpisah.
Ini dapat dipecah menjadi dua bagian, saya juga tertarik pada solusi yang mencakup bagian mana pun:
(a) memastikan suatu metode dipanggil di setidaknya satu tempat
(b) memastikan suatu metode dipanggil di paling banyak satu tempat
Saya memiliki kontrol penuh atas struktur kode, dan berbagai idiom yang mencapai ide yang sama dipersilakan.
// class.h
class MyClass {
public:
void my_method();
}
Yang berikut tidak boleh dikompilasi (tidak pernah dipanggil)
#include "class.h"
int main() {
MyClass my_class;
}
Yang berikut tidak boleh dikompilasi (dipanggil di lebih dari satu tempat)
#include "class.h"
int main() {
MyClass my_class;
my_class.my_method();
while(true) {
my_class.my_method();
}
}
Yang berikut harus dikompilasi (dipanggil tepat di satu tempat):
#include "class.h"
int main() {
MyClass my_class;
while(true) {
my_class.my_method();
}
}
__COUNTER__makro non-standar untuk melakukan ini. Sesuatu seperti static_assert(__COUNTER__ == 0); my_class.my_method();. Namun, penghitung diatur ulang di setiap unit terjemahan sehingga Anda hanya dapat memeriksa bahwa fungsi tersebut dipanggil satu kali per unit terjemahan.