模板函数

时间:2017-12-19 15:05:19

标签: c++ function class templates pointers

我有一个模板类,它有一个-template-函数,它接受与第一个参数相同的类的指针,例如:

template<class T>
class Foo{
    void f(Foo* foo){}
}

当我在我的main函数中使用它时,一切似乎都在工作,直到我为参数使用不同的模板。

int main(){
    Foo<double> f1;
    Foo<double> f2;
    f1.f(&f2); //No errors;

    Foo<bool> f3;
    f1.f(&f3);//Error : No matching function to call to Foo<double>::f(Foo<bool>*&)
}

显然,此处定义的唯一功能是Foo<T>::f(Foo<T>*)

我有没有办法定义f采用“通用”模板Foo指针,以便我可以将它与其他任何类型一起使用?

1 个答案:

答案 0 :(得分:11)

Foo本身的定义中使用符号Foo等同于说Foo<T>。如果您想支持Foo的任何其他实例化,请使f成为模板函数:

template <class T>
class Foo {
    template <class U>
    void f(Foo<U>* foo) { }
};