Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不同函数指针的映射保存在一个映射中的签名_C++_Union_Stdmap - Fatal编程技术网

C++ 不同函数指针的映射保存在一个映射中的签名

C++ 不同函数指针的映射保存在一个映射中的签名,c++,union,stdmap,C++,Union,Stdmap,我想在单独的映射中保存不同签名的函数指针。然后我想把所有这些地图放在一张地图上。我目前的做法是: union sig_u { func_signature1 fs1; func_signature2 fs2; }; std::map<std::string, sig_u> fs1_insts = { {"default_function", sig_u{.fs1=&PointerToDefault}}, {"du

我想在单独的映射中保存不同签名的函数指针。然后我想把所有这些地图放在一张地图上。我目前的做法是:

union sig_u {
    func_signature1 fs1;
    func_signature2 fs2;
};

std::map<std::string, sig_u> fs1_insts = {
    {"default_function", sig_u{.fs1=&PointerToDefault}},
    {"dummy_overloaded", sig_u{.fs1=&PointerToDummyOverloaded}}
};

std::map<std::string, sig_u> fs2_insts = {
    {"important_function", sig_u{.fs2=&PointerToImportant}},
    {"dummy_overloaded", sig_u{.fs2=&PointerToDummyOverloaded}}
};

std::map<std::string, std::map<std::string, sig_u> > signature = {
   {"group1", fs1_insts},
   {"group2", fs2_insts}
};

有没有更好的方法来获得这种行为?我对C++编程很陌生。我考虑了一些模板,但找不到任何解决方案。非常感谢

<代码> STD::变体可以用来打开C++的书来解释如何使用<代码> STD::变体< /C> >,并阅读它。虽然这对于简单函数指针是可以的,但是C++类型的安全性完全被这种实现所绕过,并且您最好知道哪个函数指针是哪个,否则容器就包含一个类型的元素。如果您想让它容纳不同类型的元素,您需要“额外的东西”(例如
std::variant
),非常感谢!我将阅读STD::变体并调整我的设计。我想你应该解释为什么你想在地图中保存函数指针,特别是当你是C++的新手时。看起来似乎有一个完全不同的设计更适合这个,就像这个看起来一样
signature["group1"]["dummy_overloaded"](...);