我对c++和boost库都比较新。
我想要做的是从类Baz
中调用类Bar
的方法foo
。以下是基本的需求:
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&)
这里我漏掉了什么?
Baz::doSomething
结束时,无论新线程正在执行什么操作,变量bar
都将被销毁。这可能会在线程开始之前就发生。 - EclipseBaz
的成员保留,要么在堆栈上分配它,或者在其他地方创建它。将其保留在堆栈上并将其传递给新线程是有麻烦的,除非你明确等待该线程完成后才从doSomething
返回。 - Eclipse