我是模板新手。我有一个问题,有没有一种方法可以用非专业(或泛型)类型作为参数来专门化一个类成员函数。也就是说,下面程序中的 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;
}
我尝试阅读它,但可以清楚地理解它是否可以完成。