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

时间:2015-03-04 11:14:26

标签: c++ c++11 lambda stl

出于调试目的,我想打印存储在std :: function中的函数指针的地址。我可以保证std :: function将指向c风格的函数或lambda。有没有办法做到这一点?

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

我试图在这里使用答案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 %x\n", bb); // Outputs 5503dfe0
printf("fp is %x\n", fp); // Should be the same as above, but outputs 4f9680

1 个答案:

答案 0 :(得分:5)

您的版本无法正常工作,因为您链接的答案是提供函数的包装,以提供您可以使用的独立版本,无论源是函数,函数指针还是std::function

在您的情况下,您可以使用target的{​​{1}}功能:

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);