関数テンプレートをc ++に特化する必要があります。
template<typename T>
void doStuff<T>() {}
に
template<>
void doStuff<DefinedClass>();
そして
template<>
void doStuff<DefinedClass2>();
私はそれが正しい構文ではないと思います(コンパイルされていないため)。どうすればいいですか?
また、doStuff<DefinedClass>
に未定義のテンプレートパラメータがないので、.cppで本文を宣言することは可能でしょうか?
注:doStuffは、本体でTを使用して変数を宣言します。
プライマリテンプレートは、テンプレート引数の2番目のペアを取得しません。これだけ:
template <typename T> void doStuff() {}
// ^^^^^^^^^
スペシャライゼーションのみが両方のtemplate <>
前面と<...>
名前の後、例:
template <> void doStuff<int>() { }
プライマリテンプレートの正しい構文は次のとおりです。
template <typename T>
void doStuff() {}
スペシャライゼーションを定義するには、次のようにします。
template <>
void doStuff<DefinedClass>() { /* function body here */ }
私はそれが正しい構文ではないと思います(コンパイルされていないため)。どうすればいいですか? doStuffは、その本体でTを使用して変数を宣言します。
template<typename T>
void doStuff()
{
T t = T(); // declare a T type variable
}
.cppで本体を宣言することは可能でしょうか?
C++はinclusive mode
のみをサポートします。個別にコンパイルして、後でリンクすることはできません。
コメントから、int
タイプに特化したい場合:
template<>
void doStuff<int>()
{
}