C++ 数据类型与模板参数不同的模板对象

C++ 数据类型与模板参数不同的模板对象,c++,C++,我有一个模板化的类,我想要一个成员函数接受该类的一个对象和任何模板参数。因此,它应该能够运行以下功能: main(){ A<double> object1; A<double> object2; A<int> object3; object1.f(object2); object1.f(object3); } main(){ A反对1; A对象2; A反对3; 反对意见1.f(反对意见2); 反对意见1.f

我有一个模板化的类,我想要一个成员函数接受该类的一个对象和任何模板参数。因此,它应该能够运行以下功能:

main(){
     A<double> object1;
     A<double> object2;
     A<int> object3;

     object1.f(object2);
     object1.f(object3);
}
main(){
A反对1;
A对象2;
A反对3;
反对意见1.f(反对意见2);
反对意见1.f(反对意见3);
}
这是我到目前为止所做的,但它似乎不起作用,因为它假设参数必须与调用对象的类型完全相同:

template<typename T>
class A
{
    void f(A<T> &a);
}
模板
甲级
{
无效f(A&A);
}

有什么想法吗?提前感谢。

f
本身需要是一个模板,有自己的模板参数:

template<typename T>
class A
{
    template <typename U>
    void f(A<U>& a);
}
模板
甲级
{
模板
无效f(A&A);
}
当您调用
object1.f(object2)
时,
f
将被实例化为
U
=
double
;调用
object1.f(object3)
时,
f
将用
U
=
int
实例化


在这两种情况下,
T
=
double
,因为
object1
属于
A
类型,并且
T
是类模板
A
的模板参数。您需要一个成员函数模板:

template <typename T>
class A
{
    template <typename U>
    void f(A<U>& a)
    {
        //...
    }
};
模板
甲级
{
模板
无效f(A&A)
{
//...
}
};
但它似乎不起作用,因为它假定参数必须与调用对象的类型完全相同:

template<typename T>
class A
{
    void f(A<T> &a);
}
当然会,因为这是你指示它做的:

template<typename T>
class A
{
    void f(A<T> &a);
}