コンパイル時にメソッドが正確に1か所で呼び出されるようにすることが可能かどうかについて知りたいです。
関数が2回以上呼び出されても問題ないことに注意してください(例:ループ内)-ただし、2つの別々のループで呼び出されるべきではありません。
これは二つの部分に分けることができ、私もどちらかの一部を覆うソリューションに興味があります:
()メソッドを確保するが、少なくとも一箇所に呼び出された
中で呼び出された(b)の方法を確保多くても1つの場所で
私はコードの構造を完全に制御しており、同じアイデアを実現するさまざまなイディオムを歓迎します。
// class.h
class MyClass {
public:
void my_method();
}
以下はコンパイルされるべきではありません(決して呼び出されません)
#include "class.h"
int main() {
MyClass my_class;
}
以下はコンパイルしないでください(複数の場所で呼び出されます)
#include "class.h"
int main() {
MyClass my_class;
my_class.my_method();
while(true) {
my_class.my_method();
}
}
以下はコンパイルする必要があります(1か所で呼び出されます)。
#include "class.h"
int main() {
MyClass my_class;
while(true) {
my_class.my_method();
}
}
__COUNTER__これを行うには、非標準のマクロを使用できます。のようなものstatic_assert(__COUNTER__ == 0); my_class.my_method();。ただし、カウンターは各翻訳単位でリセットされるため、関数が翻訳単位ごとに1回呼び出されることのみを確認できます。