[英]How to assign member function to member function pointer with overloading?
如何在C ++中分配重载到其他成员函数(或函数指针)的成员函数?
我的目标是包装成员函数。 我有以下代码,但是它不起作用,因为它有2个“ Do”。 我想要做的是包装Do1
或Do2
到Do
任何double *
或double **
。 因此,我只能运行Do
,而不必关心Do1
或Do2
。 (也许,我应该指定需要在Do1
和Do2
之间选择的条件。)
class Sample {
int (*Do)(double *arr);
int (*Do)(double **arr);
int Do1(double *arr);
int Do1(double **arr);
int Do2(double *arr);
int Do2(double **arr);
};
或您对此目标有何建议?
另外:对于Thomas来说,函数对象(函子)是个好主意,但它只能解决重载问题。 我想选择功能(例如, Do1
或Do2
)。 我有几个规定的功能,可以选择其中一项来Do
。 不过,我也希望分配自定义函数来Do
。 例如,当我运行Do
,我可以运行Do1
, Do2
或自己的新自定义函数。 (我应该设置在创建实例时将执行的功能)
和..我无法使用C ++ 11。 (我想要,但是我的服务器具有较旧的GCC版本)
您的代码格式错误,将无法编译。 您可以重载函数,但不能重载对象! 也就是说,不能有两个类型不同的名为“ Do”的指针。 我记不太清了,但是MSVC会告诉您以下信息:
'Sample :: Do':重新定义; 不同的基本类型
如果您想做这样的事情,可以使用flag:
class Sample
{
int Do(double *arr);
int Do(double **arr);
int Do1(double *arr);
int Do1(double **arr);
int Do2(double *arr);
int Do2(double **arr);
void SetDoVersion(int version);
int _do_version;
};
“执行”看起来像这样:
int Sample::Do(double *arr)
{
//For more than 2-3 versions you could also use switch().
if(this->_do_version == 1)
return this->Do1(arr);
else
return this->Do2(arr);
}
int Sample::Do(double **arr)
{
//same as above
}
SetDoVersion()设置当前的“已安装”版本:
void Sample::SetDoVersion(int version)
{
this->_do_version = version;
}
这可能是此任务最简单的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.