如何使用重载将成员函数分配给成员函数指针? 如何在C++()中将重载的成员函数分配给其他成员函数(或函数指针)?
我的目标是包装成员函数。我有下面的代码,但它不工作,因为它有2个“Do”s。我想做的是用任何如何使用重载将成员函数分配给成员函数指针? 如何在C++()中将重载的成员函数分配给其他成员函数(或函数指针)?,c++,overloading,C++,Overloading,我的目标是包装成员函数。我有下面的代码,但它不工作,因为它有2个“Do”s。我想做的是用任何double*或double**将Do1或Do2包装到do。因此,我只能运行Do,而不需要关心Do1或Do2。(也许,我应该指定需要在Do1和Do2之间选择的条件) 或者你对这个目标有什么建议 另外:对于Thomas来说,函数对象(函子)是个好主意,但它只解决重载问题。我想选择函数(例如,Do1或Do2)。我有几个规定的函数,我可以选择其中一个来执行Do。但是,我还想将自定义函数分配给Do。 例如,当我运
double*
或double**
将Do1
或Do2
包装到do
。因此,我只能运行Do
,而不需要关心Do1
或Do2
。(也许,我应该指定需要在Do1
和Do2
之间选择的条件)
或者你对这个目标有什么建议
另外:对于Thomas来说,函数对象(函子)是个好主意,但它只解决重载问题。我想选择函数(例如,Do1
或Do2
)。我有几个规定的函数,我可以选择其中一个来执行Do
。但是,我还想将自定义函数分配给Do
。
例如,当我运行Do
时,我可以运行Do1
、Do2
,或者我自己的新自定义函数。(我应该设置创建实例时将执行的函数)
和。。在我的情况下,我不能使用C++11。(我想,但我的服务器有较旧的GCC版本)您的代码格式不正确,无法编译。您可以重载函数,但不能重载对象!也就是说,不能有两个不同类型的名为“Do”的指针。我记不清了,但MSVC会告诉你这样的事情:
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
}
'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
}
setdVersion()设置当前“已安装”的版本:
void Sample::SetDoVersion(int version)
{
this->_do_version = version;
}
这可能是这项任务最简单的解决方案。您是否尝试过使用函数对象而不是函数指针?我知道我的代码有一个bug,我收到了编译器的消息。您的回答将是一个很好的选择,但是如果我想将自定义功能添加到
Do
中,此解决方案将不适合我。谢谢你的回答。