template < template-parameter-list > declarationテンプレートの仕様 | MSDN
宣言に定義を含めます。ヘッダーに定義を含めるため、コンパイルに時間がかかることがあります。
template <typename T> class MyClass { public: MyClass() { } T Add(const T& a, const T& b) { return a + b; } };
宣言と定義を分けます。テンプレートの定義時に、インスタンス化する型を指定します。
// 宣言
template <typename T>
class MyClass
{
public:
MyClass();
T Add(const T& a, const T& b);
};
// 定義
template <typename T>
MyClass<T>::MyClass()
{
}
template <typename T>
T MyClass<T>::Add(const T& a, const T& b)
{
return a + b;
}
template MyClass<int>;
template MyClass<double>;
指定されていない型では、インスタンス化できません。
MyClass<int> sample1; // ok MyClass<double> sample2; // ok MyClass<long> sample3; // error LNK2019: 未解決の外部シンボル