如何获取存储在std::函数中的c样式函数的地址

How do I get the address of a c-style function stored in an std::function?

本文关键字:函数 地址 样式 std 何获取 获取 存储      更新时间:2023-10-16

出于调试目的,我想打印存储在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