回调中的函数:编译错误

Functor in callback: compilation errors

本文关键字:编译 错误 函数 回调      更新时间:2023-10-16

我有一个使用回调的简单函数,我希望使用functor而不是普通函数作为回调。但我有编译错误。我好像错过了smth。

这是代码

#include <iostream>
#include <functional>
void some_func( void (*f)() ) 
{
    f(); 
}
class Functor
{
public:
    void g() { std::cout << "world"; }
    void operator() () { std::cout << "hello"; }
};
void g()
{
    std::cout << "beautiful";
}
int main(int c, char**v)
{
    Functor f;
    f();
    some_func(g);
    some_func(f);//line 26
    some_func(std::bind(&Functor::g, f));//line 27
    return 0;
}

结果:

g++ 1.cpp std=c++0x
1.cpp: In function 'int main(int, char**)':
1.cpp:26:16: error: cannot convert 'Functor' to 'void (*)()' for argument '1' to 'void some_func(void (*)())'
1.cpp:27:37: error: cannot convert 'std::_Bind<std::_Mem_fn<void (Functor::*)()>(Functor)>' to 'void (*)()' for argument '1' to 'void some_func(void (*)())'

cl 也是如此

some_func只接受实函数指针作为参数,而不接受函子类。尝试使用:

template <class Functor>
void some_func( Functor f ) 
{
    f();
}