gpt4 book ai didi

c++ - 从类中返回一个函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:55 25 4
gpt4 key购买 nike

我希望能够从类中返回一个函数,这样我就不需要通过返回类型进行 if-else。

我有一个返回多个字符串的类。相反,我想返回多个函数。

#include <iostream>

class Handler
{
private:

public:
int handleMessage(int code)
{
return code+1;
}

};

void func1();
void func2();
void func3();

int main (int argc, char *argv[])
{
Handler handle;
int code = handle.handleMessage(0);
if(code == 1)
{
func1();
}
return 0;
}

void func1(){ std::cout << "1" << std::endl;}
void func2(){ std::cout << "2" << std::endl;}
void func3(){ std::cout << "3" << std::endl;}

我想要的是:Handler 类中的函数 handleMessage 返回一些东西,以便在我的主应用程序中我不必使用 if-else。

所以主要看起来像这样:

function = handle.handleMessage(0); 

应用程序将选择要运行的功能。例如:

function = handle.handleMessage(0);  //will run func1 
function = handle.handleMessage(1); //will run func2

最佳答案

您可以修改成员函数,使其返回一个函数指针,例如

using fptr = void (*)();

struct Handler
{
fptr handleMessage (int code)
{
if (code == 0)
return &func1;
else if (code == 1)
return &func2;
else
return &func3;
}

};

可以这样调用

 Handler handle;
auto f = handle.handleMessage(0);
f();

请注意,上面的 if-else if-else 调度并不理想。首选存储函数指针并将它们与 code 相关联的数据成员,例如使用 std::unordered_map

请注意,当您以后需要返回有状态函数对象时,这种方法将失效。然后,您需要拥抱 std::function,它能够使用闭包或使用 operator() 重载的自定义类型来包装 lambda。

关于c++ - 从类中返回一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55588440/

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