0
template <typename T>
void foo(T t)
{
   ... // do stuff with type T
}

template <typename T>
class class_template
{
    // class body
};

template<>                       // failed attempt at full specialization
void foo(class_template<T> t)    // which doesn't work of course
{
    //full specialization for all classes of class_template
} 

上記のコードで、関数 foo をクラス テンプレートで明示的に特殊化するにはどうすればよいですか?

4

1 に答える 1

1

上記のコードで、関数fooをクラステンプレートで明示的に特殊化するにはどうすればよいですか?

それはいけません。これが部分的な専門化の要点です。ただし、関数では機能しません。

2つの解決策があります。

  • 関数をオーバーロードします。これは通常は機能します。
  • 部分的に特殊化できるクラステンプレートを参照してください。つまり、関数内で、クラステンプレートの(静的)関数を呼び出し、それを特殊化ます。
于 2012-05-17T13:56:31.830 に答える