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