0

コメントが望んでいることをどのように行うのですか?

template<typename T1, typename T2=int>
struct foo
{
  //only define foo function if T2 was explictly listed by client
  //(even if it was explictly listed as int)
  //what should be inside "enable_if"?
  foo(T1 t1, T2 t2){}
};
4

2 に答える 2

3

T2に設定しないでくださいint。代わりに、に設定してMagicFlagTypeThatNobodyElseIsSupposedToUseください。

次に、 で をtemplate作成しtypedef blahblah RealT2、ifが isにblahblah解決され、それ以外の場合に解決されます。(自分で実装する必要があります。これは非常に簡単な特性クラスです)。intT2MagicFlagTypeThatNobodyElseIsSupposedToUseT2blahblah

次にRealT2、コードで使用します。が と同じ場合T2に渡されたかどうかを検出できます。標準的なトリックを使用して、コンパイル時のブール条件 (通常は継承による) に基づいてメソッドを追加/削除するか、SFINAE を使用してメソッドに一致する人をブロックします。RealT2T2

于 2013-06-06T17:34:04.467 に答える
0

異なるテンプレート引数に応じて異なる構成の構造体を作成したい場合は、おそらく C++11 で可変個引数テンプレートを探しているでしょう。

http://www.cplusplus.com/articles/EhvU7k9E/

于 2013-06-06T17:17:01.470 に答える