现在我有一个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()有三个或更多不同的类。有没有办法做到这一点?
答案 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 ) ;
}
答案 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);
}
这是另一种选择。