gpt4 book ai didi

重载函数的C++地址

转载 作者:行者123 更新时间:2023-11-27 22:44:13 26 4
gpt4 key购买 nike

在我的项目中,我想做如下事情:

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*> initializeAddressMap()
{
std::map<std::string, void*> addressmap;
addressmap["test0"] = (void*) &test0; // ERROR HERE <------
return addressmap;
}

基本上,第三个函数返回一个string 到函数地址的映射。然而,在这一点上,我得到一个错误 address of overloaded function with no contextual type information,这也是有道理的,因为我已经重载了 test0 函数,编译器在这个点不知道取哪个函数的地址。除了用不同的名称调用我的函数之外,有什么方法可以解决这个问题吗?

最佳答案

获取函数地址时需要定义指针类型:

#include <iostream>

static void test(void)
{
printf("%s [%d]\n", __func__, __LINE__);
}

static void test(int a)
{
printf("%s [%d] %d\n", __func__, __LINE__, a);
}

int main()
{
using t_pf1 = void (*)(void);
using t_pf2 = void (*)(int);
::std::cout << (uintptr_t) t_pf1{&test} << "\n"
<< (uintptr_t) t_pf2{&test} << ::std::endl;
return 0;
}

working code online

关于重载函数的C++地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45146522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com