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

Template object of different data type than template parameter

本文关键字:对象 参数 数据类型      更新时间:2023-10-16

我有一个模板化类,我想要一个成员函数使用任何模板参数接收该类的对象。 所以它应该能够运行如下内容:

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);
}

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

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的模板参数。

您需要一个成员函数模板:

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

但它似乎不起作用,因为它假设参数必须与调用对象具有完全相同的类型:

当然可以,因为这是你指示它做的:

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);
}