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

ash*_*gpu 3 c++ lambda stl c++11

为了进行调试,我想打印存储在我的std :: function中的函数指针的地址。我可以保证std :: function将指向c样式函数或lambda。有什么办法吗?

否则,添加函数指针时,我将不得不将其存储在内存中,并修改所有的lambda。

我试图在这里使用答案/sf/answers/1289601491/,但是它似乎不起作用。

一些示例代码:

std::function<void()> func = commands.front();
void * fp = get_fn_ptr<0>(func);
void * bb = &glBindBuffer;
printf("bb is %x\n", bb); // Outputs 5503dfe0
printf("fp is %x\n", fp); // Should be the same as above, but outputs 4f9680
Run Code Online (Sandbox Code Playgroud)

Tar*_*ama 5

您的版本无效,因为您链接的答案是围绕函数提供包装,以提供您可以使用的独立版本,无论源是函子,函数指针还是std::function

您可以使用以下target功能std::function

void foo(){}

std::function<void()> f = foo;
auto fp = *f.target<void(*)()>();
auto bb = &foo;
printf("bb is %x\n", bb);
printf("fp is %x\n", fp);
Run Code Online (Sandbox Code Playgroud)

输出:

bb is 80487e0
fp is 80487e0
Run Code Online (Sandbox Code Playgroud)