需要在C ++中将函数分配给变量

DBe*_*eck 2 c++ variables unordered-map function auto

这不应该太难,但我被卡住了。

我正在尝试将函数分配给变量,但我需要知道数据类型,以便将其分配给地图。

我成功地做到了这一点:

auto pfunc = Ext::SomeFunction
Run Code Online (Sandbox Code Playgroud)

这将允许我做:

pfunc(arg, arg2);
Run Code Online (Sandbox Code Playgroud)

但是我需要知道“auto”涵盖的数据类型,以便我可以将我的函数映射到字符串。

例如:

std::unordered_map<std::string, "datatype"> StringToFunc = {{"Duplicate", Ext::Duplicate}};
Run Code Online (Sandbox Code Playgroud)

这些函数中的大多数返回 void,但还有其他函数返回 double 和 int。

如果有更好的方法可以做到这一点,请告诉我,但我真的很想知道上面使用的 auto 背后的数据类型。

非常感谢您提供的任何帮助。

Dei*_*Dei 5

给定 aclass foo和成员函数fun,您可以通过以下方式创建成员函数指针:

struct foo 
{
    void fun(int, float);
};

void(foo::*fptr)(int, float) = &foo::fun;
Run Code Online (Sandbox Code Playgroud)

所以类型fptrvoid(foo::*)(int, float). 通常对于这样的事情,您可能希望引入一个typedefor 类型别名以使声明更具可读性:

using function = void(foo::*)(int, float);
// or typedef void(foo::*function)(int, float);
function fptr = &foo::fun;
Run Code Online (Sandbox Code Playgroud)

此外,以上内容适用于成员函数指针。对于自由函数,语法为:

void fun(int, float);
void(*fptr)(int, float) = &fun;
Run Code Online (Sandbox Code Playgroud)

您可以相应地定义您的类型别名。