繁体   English   中英

如何通过重载将成员函数分配给成员函数指针?

[英]How to assign member function to member function pointer with overloading?

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

我的目标是包装成员函数。 我有以下代码,但是它不起作用,因为它有2个“ Do”。 我想要做的是包装Do1Do2Do任何double *double ** 因此,我只能运行Do ,而不必关心Do1Do2 (也许,我应该指定需要在Do1Do2之间选择的条件。)

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来说,函数对象(函子)是个好主意,但它只能解决重载问题。 我想选择功能(例如, Do1Do2 )。 我有几个规定的功能,可以选择其中一项来Do 不过,我也希望分配自定义函数来Do 例如,当我运行Do ,我可以运行Do1Do2或自己的新自定义函数。 (我应该设置在创建实例时将执行的功能)

和..我无法使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM