在一个数组中存储不同的函数指针?

Storing different function pointers in one array?

如果我有两个这样的函数:

void funcA(std::string str);

void funcB(int32_t i, int32_t j);

我可以在同一个映射中存储指向这两个函数的指针吗?示例:

std::unordered_map<std::string, SomeType> map;
map.emplace("funcA", &funcA);
map.emplace("funcB", &funcB);
map["funcA"]("test");
map["funcB"](3,4);

std::any行吗?或者可能是某种带有 std::function.

的模板

编辑: 函数也可以有不同的 return 类型。 PS: 我目前正在学习视频游戏中的回调和事件管理器。

您的函数有不同的类型,但 map 需要一个 value_type。您可以使用 std::tuple,类型作为“键”,函数指针作为“值”:

void funcA(std::string) {}
void funcB(int32_t, int32_t) {}

int main() {
    std::tuple map{funcA, funcB};
    get<decltype(&funcA)>(map)("abc");
    get<decltype(&funcB)>(map)(1, 2);
}

不好意思理解有误,您可以在下方找到解决方法。

#include <iostream>
#include <map>

typedef void (*customfunction)();

void hello() {
    std::cout<<"hello" << std::endl;
}

void hello_key(std::string value){
        std::cout<<"hello " << value << std::endl;
}

void hello_key_2(int value){
        std::cout<<"hello " << value << std::endl;
}

int main(){
    

    std::map<std::string, customfunction> function_map;
    
    function_map.emplace("test",customfunction(&hello));
    function_map.emplace("test-2",customfunction(&hello_key));
    function_map.emplace("test-3",customfunction(&hello_key_2));

    function_map["test"]();
    ((void(*)(std::string))function_map["test-2"])("yakup");
    ((void(*)(int))function_map["test-3"])(4);
    
    return 0;
}