2

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

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

有任何想法吗?提前致谢。

4

3 回答 3

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

于 2012-08-09T16:59:28.063 回答
1

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

template <typename T>
class A
{
    template <typename U>
    void f(A<U>& a)
    {
        //...
    }
};
于 2012-08-09T17:00:30.163 回答
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);
}
于 2012-08-09T17:00:32.523 回答