我有一个模板化的类,我想要一个成员函数接受该类的对象与任何模板参数。所以它应该能够运行如下:
main(){
A<double> object1;
A<double> object2;
A<int> object3;
object1.f(object2);
object1.f(object3);
}
这是我到目前为止所做的,但它似乎不起作用,因为它假定参数必须与调用对象的类型完全相同:
template<typename T>
class A
{
void f(A<T> &a);
}
有什么想法吗?提前谢谢。
答案 0 :(得分:3)
f
本身需要是一个模板,具有自己的模板参数:
template<typename T>
class A
{
template <typename U>
void f(A<U>& a);
}
当您致电object1.f(object2)
时,f
将使用U
= double
进行实例化;当您致电object1.f(object3)
时,f
将通过U
= int
进行实例化。
在这两种情况下T
= double
,因为object1
的类型为A<double>
而T
是类模板A
的模板参数
答案 1 :(得分:1)
您需要一个成员函数模板:
template <typename T>
class A
{
template <typename U>
void f(A<U>& a)
{
//...
}
};
答案 2 :(得分:1)
但它似乎不起作用,因为它假定参数必须与调用对象的类型完全相同:
当然可以,因为这是你指示它做的事情:
template<typename T>
class A
{
void f(A<T> &a);
}
也许你想让f
成为一个模板:
template<typename T>
class A
{
template <typename T1> //<--- different type
void f(A<T1> &a);
}