20

関数テンプレートをc++に特化する必要があります。

template<typename T>  
void doStuff<T>() {}

template<>
void doStuff<DefinedClass>();

template<>
void doStuff<DefinedClass2>();

私はそれが正しい構文ではないと思います(コンパイルされていないため)。どうすればいいですか?
また、で未定義のテンプレートパラメータを使用しないのでdoStuff<DefinedClass>、.cppで本文を宣言することは可能でしょうか?

注:doStuffは、その本体でTを使用して変数を宣言します。

4

3 に答える 3

18

プライマリテンプレートは、テンプレート引数の2番目のペアを取得しません。これだけ:

template <typename T> void doStuff() {}
//                        ^^^^^^^^^

template <>スペシャライゼーションのみが、名前の前と後ろの両方にあり<...>ます。例:

template <> void doStuff<int>() { }
于 2013-02-08T09:51:16.443 に答える
5

プライマリテンプレートの正しい構文は次のとおりです。

template <typename T>
void doStuff() {}

スペシャライゼーションを定義するには、次のようにします。

template <>
void doStuff<DefinedClass>() { /* function body here */ }
于 2013-02-08T10:01:34.020 に答える
3

私はそれが正しい構文ではないと思います(コンパイルされていないため)。どうすればいいですか?doStuffは、その本体でTを使用して変数を宣言します。

template<typename T>  
void doStuff() 
{
  T t = T();   // declare a T type variable

}

.cppで本文を宣言することは可能でしょうか?

C ++はのみをサポートしinclusive modeます。個別にコンパイルして、後でリンクすることはできません。

コメントから、タイプに特化したい場合int

template<>
void doStuff<int>()
{
}
于 2013-02-08T10:02:37.153 に答える