プロジェクトのすべてのソースファイルに沿って増加するマクロを定義しようとしています。__COUNTER__
すべてのファイルに個別のマクロとは異なります。次のようなクラスで静的メンバー変数を使用してみました。
class A{
static int GetNextNum() {
number++;
return number - 1;
}
private:
static int number;
};
#define NEXT_NUM A::GetNextNum()
しかし、結果は私が望んでいないものです。たとえば、このサイクルの各反復で同じ数にしたい場合(で発生するように__COUNTER__
):
for (int i = 0; i < 10; ++i) {
doSomething(NEXT_NUM)
}
私が実施したように、それは反復ごとに増加します。必要なことをどのように達成できるかについてのアイデアはありますか?(私はVisual Studioを使用していますが、コンパイラに依存しないソリューションを好みます)。
編集:ここで要求されているように、私がやりたいことに似た何かのミニマルな例です。コードの特定のセクションを通過する回数をカウントするクラスを定義しようとしています。このようなクラスの使用方法は次のとおりです。
for (int i = 0; i < 10; ++i) {
ExecuteCounter(location_id);
... do stuff ...
}
私が追跡してデストラクタに蓄積しているものは他にもたくさんありますが、これで十分にアイデアを得ることができると思います。最初は、エントリが気になる情報を格納するオブジェクトであり、文字列が付加によって形成されるマップを使用しました__FILE__
(__LINE__
したがって、場所を一意に識別します)が、これは遅いことがわかりました。そこで、マップを使用する代わりに、テーブルとその中のインデックスを使用することにしました。これにより、全体的な複雑さから対数が削除され、パフォーマンスが大幅に向上します。この説明が私の質問をより明確にすることを願っています。