在我的项目中,我有以下功能:
static void test0(void)
{
printf("%s [%d]\n", __func__, __LINE__);
}
static void test0(int a)
{
printf("%s [%d] %d\n", __func__, __LINE__, a);
}
static std::map<std::string, void*> getAddressMap()
{
std::map<std::string, void*> addressmap;
void (*select1)(void) = test0; // will match void(void)
addressmap["test0"]=reinterpret_cast<void *>(select1);
void (*select2)(int) = test0; // will match void(int)
addressmap["test0"]=reinterpret_cast<void *>(select2);
return addressmap;
}
此时您可以看到,为了将每个指针存储在 map 中,我需要定义一个特殊的指针,然后我才能将其存储在 map 中...
由于所有这些方法和 stub 都是从模板生成的,因此仅使用一行代码会更实用。所以,我的问题是,有没有一种方法可以在一行中完成?
最佳答案
转换函数指针(在转换为 void* 之前)应该工作得很好......
addressmap["test0"] = reinterpret_cast<void *>(static_cast<void(*)(void)>(test0));
addressmap["test0"] = reinterpret_cast<void *>(static_cast<void(*)(int)>(test0));
关于C++将函数指针一行放入映射中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45233425/