0

テンプレートパラメータを別の場所で定義された関数に渡すことはできますか? たとえば、私はクラスを持っています

バリア.pp

template<Location L, Knock K>
class Barrier
{
  //...
  void checkBarrier( ... )
  {
    BarrierBest_checkBarrier<L, K>( ... );
  }
  //...
}

その他.cpp

template<Location L, Knock K>
BarrierBest_checkBarrier( ... )
{
  //Use L and K to do call other function
}

私が今持っているように、コンパイラーは、テンプレートパラメーターのすべての可能な組み合わせ、つまり、、、、に対して未解決の外部シンボルをスローBarrierBest_checkBarrier<1,1>BarrierBest_checkBarrier<1,0>ますBarrierBest_checkBarrier<0,1>BarrierBest_checkBarrier<0,0>

これを機能させる方法はありますか?

4

2 に答える 2

2

組み合わせの数が限られている場合は、テンプレートを明示的にインスタンス化して、コードをヘッダー ファイルとソース ファイルに分けておくことができます。

これをソースファイルの一番下に置きます

template void BarrierBest_checkBarrier<0, 0>(...);
template void BarrierBest_checkBarrier<0, 1>(...);
template void BarrierBest_checkBarrier<1, 0>(...);
template void BarrierBest_checkBarrier<1, 1>(...);

関数を呼び出す他のファイルで、このリストにない独自のパラメーターを選択する場合は、テンプレート化されたコード全体をヘッダー ファイルに配置する必要があります。

于 2013-08-22T15:08:45.927 に答える
0

問題は、テンプレート化された関数がヘッダーではなく cpp ファイルにある可能性があります。テンプレート パラメーターは、コンパイル時に認識されている必要があります。個別のコンパイル単位がある場合は、そうではありません。

于 2013-08-22T15:07:53.377 に答える