関数テンプレートがfunc
あり、同じテンプレート パラメーターで複数回インスタンス化されるとします。同じテンプレート パラメータを持つ個々のインスタンスを (0 から) カウントする必要があり、インスタンス カウントはfunc
の実装からアクセスできる必要があります。明らかに、静的メンバーは私が探しているものではありません。代わりに、コンパイル時の型計算でインスタンス カウントを実装する必要があるように見えます。
例 (ユーザー コード):
{
for(int i=0;i<10;i++) {
func<float>(); // This should be instance number 0
}
func<float>(); // This should be instance number 1
}
実行時ループにもかかわらず、 の最初のインスタンスはfunc
番号 0 を取得します。これは、すべてのループ反復でインスタンス番号が変更されるべきではないということです。ループが終了し、関数が再度呼び出された場合にのみ、数値を 1 に増やします。
元のテンプレート:
template<class T> void func() {}
インスタンス数にアクセスするには、次の方法が考えられます。
template<class T,int COUNT> void func() {} // instance number as template parameter
template<class T> void func(int count) {} // or as function argument
これは、派手な呼び出しラッパーで行うことができますか? もしそうなら、どのように?
私はそれが不可能であることを恐れています...しかし、今、私はそれをうまく利用しています..