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

时间:2012-08-09 16:57:10

标签: c++

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

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

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

3 个答案:

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