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

C++ function that allows arbitrary class input

本文关键字:c++ 函数 输入 许任意      更新时间:2023-10-16

现在我有一个类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()。有什么办法可以做到吗?

使用一个简单的模板函数:

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

然后你叫它:

A a;
myfun(a);
B b;
myfun(b);

一个选择是使用函数模板:

template <typename T>
double myfun(T t){
    return t.f(1.0);
}
int main()
{
  A a1 ;
  B b1 ;
  myfun( a1 ) ;
  myfun( b1 ) ;
}

现场观看

模板方法确实是前面提到的方法。如果你对模板感到不舒服,你可以通过继承来获得同样的效果。

使用具有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);
}