在c ++中使用Boost从另一个类调用函数

时间:2011-09-16 18:34:23

标签: c++ boost

我对c ++和boost库都很新。

我想要做的是从类foo中的类Bar调用方法Baz。这基本上就是我想要实现的目标:

Baz::doSomething() {
    Bar bar;

    boost::thread qux(bar.foo);
}

foo函数可能类似于:

// bar.cpp

void foo() {
    const int leet = 1337; // Very useful
}

然而,当我尝试编译它时告诉我:

error: no matching function for call to ‘boost::thread::thread(<unresolved overloaded function type>)’
/usr/local/include/boost/thread/detail/thread.hpp:215:9: note: candidates are: boost::thread::thread(boost::detail::thread_move_t<boost::thread>)
/usr/local/include/boost/thread/detail/thread.hpp:201:18: note:                 boost::thread::thread(F, typename boost::disable_if<boost::is_convertible<T&, boost::detail::thread_move_t<T> >, boost::thread::dummy*>::type) [with F = void (Snake::*)(), typename boost::disable_if<boost::is_convertible<T&, boost::detail::thread_move_t<T> >, boost::thread::dummy*>::type = boost::thread::dummy*]
/usr/local/include/boost/thread/detail/thread.hpp:154:9: note:                 boost::thread::thread()
/usr/local/include/boost/thread/detail/thread.hpp:122:18: note:                 boost::thread::thread(boost::detail::thread_data_ptr)
/usr/local/include/boost/thread/detail/thread.hpp:113:9: note:                 boost::thread::thread(boost::thread&)

我在这里缺少什么?

2 个答案:

答案 0 :(得分:3)

会员功能与免费功能不同。 您需要使用std::mem_fun_ref来获取仿函数,并且boost::bind(或者std::bind,如果您的编译器支持它)来绑定应该调用该函数的对象以使用它们。

最终结果应如下所示:

boost::thread qux(boost::bind(&Foo::bar, bar)); // makes a copy of bar
boost::thread qux(boost::bind(&Foo::bar, &bar)); // make no copy of bar and calls the original instance

或者不要使用bind并让thread进行绑定:

boost::thread qux(&Foo::bar, &bar);

编辑: 我记得错了:你不需要mem_funboost::bind支持指向开箱即用成员的指针。

感谢有关此问题的评论。

答案 1 :(得分:2)

boost::thread qux(boost::bind(
    &Bar::foo,      // the method to invoke
    &bar            // the instance of the class
    ));