繁体   English   中英

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

[英]C++ function that allows arbitrary class input

现在我有一个类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);
}

这是另一种选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM