gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:12 24 4
gpt4 key购买 nike

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

我的目标是包装成员函数。我有以下代码但它不起作用,因为它有 2 个“Do”。我想要做的是用任何 double *double * 将 Do1Do2 包装到 Do *。因此,我可以只运行 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 来说,函数对象(functors)是个好主意,但它只能解决重载问题。我想选择函数(例如,Do1Do2)。我有几个规定的功能,我可以选择其中一个来Do。但是,我还想将自定义函数分配给 Do。例如,当我运行 Do 时,我可以运行 Do1Do2 或我自己的新自定义函数。 (我应该设置我创建实例时执行什么函数)

并且.. 我不能在我的情况下使用 C++11。 (我想,但我的服务器有一个旧的 GCC 版本)

最佳答案

您的代码格式错误,无法编译。您可以重载函数,但不能重载对象!也就是说,你不能有两个不同类型的名为“Do”的指针。我记不太清了,但 MSVC 会告诉你这样的事情:

'Sample::Do' : redefinition; different basic types

如果你想做那样的事情,你可以使用标志:

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;
}

这可能是该任务最简单的解决方案。

关于c++ - 如何通过重载将成员函数分配给成员函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21713545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com