如何获取存储在std::函数中的c样式函数的地址
How do I get the address of a c-style function stored in an std::function?
出于调试目的,我想打印存储在std::函数中的函数指针的地址。我可以保证std::函数将指向c样式函数或lambda。有办法做到这一点吗?
否则,在添加和修改所有Lambda时,我将不得不将函数指针存储在内存中。
我试着用这里的答案https://stackoverflow.com/a/18422878/274249但它似乎不起作用。
一些示例代码:
std::function<void()> func = commands.front();
void * fp = get_fn_ptr<0>(func);
void * bb = &glBindBuffer;
printf("bb is %xn", bb); // Outputs 5503dfe0
printf("fp is %xn", fp); // Should be the same as above, but outputs 4f9680
您的版本不起作用,因为您链接到的答案是提供函数的包装,以提供一个独立的版本,无论源是函子、函数指针还是std::function
,您都可以使用。
在您的情况下,您可以使用std::function
:的target
功能
void foo(){}
std::function<void()> f = foo;
auto fp = *f.target<void(*)()>();
auto bb = &foo;
printf("bb is %xn", bb);
printf("fp is %xn", fp);
输出:
bb is 80487e0
fp is 80487e0
相关文章:
- 为什么成员函数地址离自由函数这么远?
- MFC 消息映射中的函数地址
- 设置成员 GlobalCEFApp->OnWebKit使用函数地址初始化 C++生成器
- 在Visual C 中找到调用函数地址(安全)
- 获取函数地址时出现奇怪行为
- 函数地址
- 如何在C++中打印成员函数地址
- 为什么函数指针、函数地址和函数相同
- 匹配布尔值与常量 void* 重载的函数地址
- 函数地址和函数地址的地址没有区别吗?
- 在 Linux 库中查找静态函数地址
- 调用传递给 gcc 内联汇编器 (avr-gcc) 的 const 函数地址
- 使用32位应用程序从64位kernel32.dll获取函数地址
- 为什么函数地址不是常量表达式
- 将函数地址转换为 64 位整数:未定义/行为不当
- Visual Studio在打印函数地址时出错
- 获取有关函数地址的信息
- 通过函数地址调用另一个类的函数
- 打印成员函数地址的最简单方法是什么?
- 圆括号成员函数地址错误