有一个有趣的问题,并寻找一些澄清。我有使用旧函数指针方法的工作示例,但尝试使用std :: function包装器,但现在它不再有效。
示例代码是开始实现回调机制,当我使用函数指针方法时,我获得了所需的结果。
callback initiated, m_callback = 0
callback initiated, m_callback = 1
callback initiated, m_callback = 0
callback initiated, m_callback = 1
...
但是当使用std :: function包装器方法时,我没有得到预期的结果。
callback initiated, m_callback = 0
callback initiated, m_callback = 0
callback initiated, m_callback = 0
callback initiated, m_callback = 0
...
任何人都可以指出我所犯的任何错误吗?我评论/取消注释两种方法(函数指针与函数包装器)。
#include <iostream>
#include <functional>
#include <chrono>
#include <thread>
void callback(int callback)
{
int m_callback = callback;
std::cout << "m_callback = " << m_callback << std::endl;
}
void foo(void (*ptr)(int))
// void foo(std::function<void(int)> ptr)
{
std::this_thread::sleep_for(std::chrono::milliseconds(500));
int callback = (callback == 0) ? 1 : 0;
ptr(callback);
}
// ----------------------------------------------------------------
int main(int argc, char ** agrv)
{
void (*func_ptr)(int) = &callback;
std::function<void(int)> std_func_ptr = &callback;
while(1)
{
foo(func_ptr);
// foo(std_func_ptr);
}
return 0;
}