C ++回调 - std :: function vs Function Pointer

时间:2017-09-06 21:18:45

标签: c++ c++11

有一个有趣的问题,并寻找一些澄清。我有使用旧函数指针方法的工作示例,但尝试使用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;
}

0 个答案:

没有答案