C++将函数指针放入一行的映射中

C++ put function pointer into a map in one line

本文关键字:一行 映射 函数 指针 C++      更新时间:2023-10-16

在我的项目中,我有以下功能:

static void test0(void)
{
printf("%s [%d]n", __func__, __LINE__);
}
static void test0(int a)
{
printf("%s [%d] %dn", __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;
}

在这一点上,您可以看到,为了将每个指针存储在地图中,我需要定义一个特殊的指针,然后我才能将其存储在地图中......

由于所有这些方法和存根都是从模板生成的,因此仅使用一行会更实用。所以,我的问题是,有没有办法只用一行?

强制转换函数指针(在转换为 void* 之前(应该可以正常工作......

addressmap["test0"] = reinterpret_cast<void *>(static_cast<void(*)(void)>(test0));
addressmap["test0"] = reinterpret_cast<void *>(static_cast<void(*)(int)>(test0));