テンプレート初心者です。質問がありました。特殊化されていない (またはジェネリックな) 型をパラメーターとしてクラス メンバー関数を特殊化する方法はありますか。つまり、次のプログラムの U1 と U2 は U1 型の boost::shared_ptr であり、T1 と T2 は通常の型です。
#include <iostream>
template <typename T1, typename T2>
class X {
public:
template <typename U1, typename U2>
void get_as(U1& source, U2& dest);
};
class Y {
};
template<> template<>
void
X<int, int>::get_as<double, double>(double& source, double& dest) {
std::cout << "SOURCE IS " << source << std::endl;
std::cout << "DESTINATION IS " << dest << std::endl;
}
template<> template<>
void
X<int, int>::get_as<shared_ptr, shared_ptr>(shared_ptr<Y>& source, shared_ptr<Y>& dest) {
//some logic
}
int main()
{
double d1 = 1.0;
double d2 = 1.1;
X<int, int> x;
x.get_as(d1, d2);
shared_ptr<Y> p1(new Y());
shared_ptr<Y> p2(new Y());
x.get_as(p1, p2); //Would this work?
return 0;
}
私はそれを読んでみましたが、それができるかできないかがはっきりとわかりました。