回调函数:编译错误

时间:2012-01-12 10:50:13

标签: c++ function-pointers

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

这是代码

#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

的相同故事

1 个答案:

答案 0 :(得分:3)

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

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