如何使用重载将成员函数分配给成员函数指针? 如何在C++()中将重载的成员函数分配给其他成员函数(或函数指针)?

如何使用重载将成员函数分配给成员函数指针? 如何在C++()中将重载的成员函数分配给其他成员函数(或函数指针)?,c++,overloading,C++,Overloading,我的目标是包装成员函数。我有下面的代码,但它不工作,因为它有2个“Do”s。我想做的是用任何double*或double**将Do1或Do2包装到do。因此,我只能运行Do,而不需要关心Do1或Do2。(也许,我应该指定需要在Do1和Do2之间选择的条件) 或者你对这个目标有什么建议 另外:对于Thomas来说,函数对象(函子)是个好主意,但它只解决重载问题。我想选择函数(例如,Do1或Do2)。我有几个规定的函数,我可以选择其中一个来执行Do。但是,我还想将自定义函数分配给Do。 例如,当我运

我的目标是包装成员函数。我有下面的代码,但它不工作,因为它有2个“Do”s。我想做的是用任何
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
中,此解决方案将不适合我。谢谢你的回答。