在一个数组中存储不同的函数指针?
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;
}
如果我有两个这样的函数:
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;
}