c ++泛型指针(member?)函数

Joã*_*ela 2 c++ member-function-pointers function-pointers boost-bind

我似乎无法声明一个函数的泛型指针.

要调用这两个函数:

void myfunc1(std::string str)
{
    std::cout << str << std::endl;
}
struct X
{
        void f(std::string str){ std::cout<< str << std::endl;}
};
Run Code Online (Sandbox Code Playgroud)

和这两个函数调用者:

typedef void (*userhandler_t) (std::string);
struct example
{   
    userhandler_t userhandler_;

    example(userhandler_t userhandler): userhandler_(userhandler){}

    void call(std::string str)
    {   
        userhandler_(str);
    }
};
template<typename func_t>
void justfunc(func_t func)
{
    func("hello, works!");
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用它们与boost :: bind来调用成员函数时,它们会给我编译错误.

这工作:

example e1(&myfunc1);
e1.call("hello, world!");
justfunc(&myfunc1);
Run Code Online (Sandbox Code Playgroud)

这不是:

X x;
example e2(boost::bind(&X::f, &x, _1));
e2.call("hello, world2!");
justfunc(boost::bind(&X::f, &x, _1));
Run Code Online (Sandbox Code Playgroud)

应该怎么做?

Mar*_*tos 7

boost::bind创建行为类似于函数的对象,而不是实际的函数指针.使用Boost.Function库来保存调用的结果boost::bind:

struct example
{
    boost::function<void(std::string)> userhandler_;
    ...
};
Run Code Online (Sandbox Code Playgroud)