1

テンプレートパラメータの1つが特定のタイプである場合に、テンプレート化されたメソッドの動作を部分的に特殊化することはどういうわけか可能かどうか疑問に思います。

template<class T>
void Foo(T& parameter)
{
    /* some generic - all types - stuff */

    If(T is int) // this is pseudo-code, typeinfo? Boost?
    {
        /* some specific int processing which might not compile with other types */
    }

    /* again some common stuff */
}

どんな提案でも大歓迎です。ありがとう

4

3 に答える 3

3

関数の一部のみを特殊化する場合は、特殊化された実装を使用して関数の一部を除外する必要があります。

template<class T>
void Bar(T &t) {}

void Bar(int &i) {
    /* some specific int processing which might not compile with other types */
}


template<class T>
void Foo(T &t) {
    /* some generic - all types - stuff */

    Bar(t);

    /* again some common stuff */
}
于 2012-07-02T21:01:37.850 に答える
2

もちろん:

// helper funciton
template <class T>
void my_helper_function(T& v)
{
  // nothing specific
}

void my_helper_function(int& v)
{
  // int-specific operations
}

// generic version
template <class T>
void Foo(T& v)
{
  /* some generic - all types - stuff */

  my_helper_function(v);

  /* again some common stuff */
}
于 2012-07-02T21:00:07.500 に答える
0

はい、テンプレート関数の特殊化を提供できます(部分的な特殊化ではありません)。メンバー関数の場合、テンプレートを含むクラスの後に名前空間レベルで特殊化を定義する必要があります。

関数の一部のみを特殊化する必要があるということであれば、それを直接行うことはできませんが、ロジックのその部分を実装する別のテンプレート関数を作成し、特殊化してテンプレートから呼び出すことができます。コンパイラーは、単一バージョンのFooテンプレートと適切なバージョンのFooImplDetail関数を使用します。

于 2012-07-02T20:56:57.300 に答える