如何在C ++中分配重载到其他成员函数(或函数指针)的成员函数?
我的目标是包装成员函数。我有以下代码,它不起作用,因为它有2“做”。我想要做的是将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版本)
答案 0 :(得分:1)
您的代码格式错误,无法编译。你可以重载函数,但不能重载对象!也就是说,你不能有两个名为'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;
};
'Do'看起来像这样:
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;
}
这可能是完成此任务的最简单的解决方案。