允许任意类输入的C ++函数

时间:2014-03-10 21:31:29

标签: c++ class templates overloading

现在我有一个A类,它有一个方法f:

class A{
public:
    double f(double x){return 0.0;};
};

我还有另一个B级用另一个方法f:

class B{
public:
    double f(double x){return 0.0;};
};

我希望我的函数myfun能够接受A类或B类,而不必重载函数:

double myfun(A a){
    return a.f(1.0);
}
double myfun(B b){
    return b.f(1.0);
}

我不想重载函数,因为我将使用方法f()有三个或更多不同的类。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:4)

使用简单的模板功能:

template<typename T>
double myfun(T t) {
    return t.f(1.0);
}

然后你称之为:

A a;
myfun(a);

B b;
myfun(b);

答案 1 :(得分:3)

一种选择是使用function templates

template <typename T>
double myfun(T t){
    return t.f(1.0);
}

int main()
{
  A a1 ;
  B b1 ;

  myfun( a1 ) ;
  myfun( b1 ) ;
}

See it live

答案 2 :(得分:-1)

模板方法确实是已经提到的方法。 如果您对模板感到不舒服,可以通过继承获得相同的效果。

使用具有myFun虚拟(或纯虚拟)的基类,然后从该类派生每个后续类。

class Base {
public:
virtual double f(double x)=0;
}

class A : Base {
public :
double f (double x){return 0.0};
}

class B : Base {
public :
double f (double x}{return 1.0};
}

double myFun(Base b) {
   return b.f(1.0);
}

这是另一种选择。