template <typename T, int a, UINT32 B>
class Test
{
public:
Test(T, int);
void foo();
int bar();
};
このクラスの外部でコンストラクターと関数を定義するにはどうすればよいですか?
template <typename T, int a, UINT32 B>
class Test
{
public:
Test(T, int);
void foo();
int bar();
};
このクラスの外部でコンストラクターと関数を定義するにはどうすればよいですか?
コンストラクター/メソッド定義の前に完全なテンプレート「仕様」を含めるだけで、メソッド/コンストラクター名を修飾するときに、クラス名の後に山括弧で囲まれたテンプレートパラメーター名も含めます。
このような:
#include <iostream>
#include <vector>
template <typename T, int a, int b>
class Test
{
public:
Test(T t, int i);
void foo();
int bar();
};
template <typename T, int a, int b>
Test<T, a, b>::Test(T t, int i)
{
std::cout << "Constructor, i = " << i << std::endl;
}
template <typename T, int a, int b>
void Test<T, a, b>::foo()
{
std::cout << "foo() Template params:" << a << " " << b << std::endl;
}
template <typename T, int a, int b>
int Test<T, a, b>::bar()
{
std::cout << "bar() Template params:" << a << " " << b << std::endl;
}
int main()
{
Test<std::vector<double>, 13, 42> t(std::vector<double>(2), 5);
t.foo();
t.bar();
}
template <typename T, int a, int B>
Test<T, a, B>::Test(T x1, int x2)
{
}
関数に対しても同じ方法を実行できます。