c – 使用BOOST线程属性会导致绑定编译错误

好的..首先,我不得不说我正在使用BOOST来源(我必须).
我既是BOOST又是C新手,但我并不擅长编码(我很习惯使用托管语言).我在一个有点大的项目中遇到了这个问题,然后我在这里给出的这个小代码片段中重现了它:

#include <boost/thread.hpp>

void foo(int bar) {
    printf("Chu %d!",bar);
}

int main() {
    boost::thread_attributes attrs;

    boost::thread causeTrouble(attrs,foo,42); // <-- Probably problematic line
    causeTrouble.join();
}

根据BOOST 1.52.0 Documentation,这个片段应该编译并运行良好;但是,它在BOOST库头文件中给出了一个奇怪的编译问题(不存在其他错误或警告):

<boost_path>/bind/bind.hpp:313: error: no match for call to '(boost::thread_attributes) (void (*&)(int), int&)

对我来说,看起来没有实际的boost :: thread(boost :: thread_attributes,F f)构造函数,即使它应该是根据之前链接的文档.
无论如何,有趣的是以下几行都可以正常编译:

boost::thread noTrouble(attrs,foo);

boost::thread noTroubleEither(foo,42);

即使我彻底搜索了*和互联网的其余部分,我也不知道在哪里转过头:(事实上这是我第一次*实际问一个新问题.帮助!

解决方法:

你说,

it looks like there’s no actual boost::thread(boost::thread_attributes,F f)

这不是你试图打电话的构造函数.你正在调用boost :: thread(attrs,foo,42).基于链接,看起来没有实现boost :: thread(boost :: attributes,F,Args)构造函数,因此投诉.

首先尝试使用boost :: bind显式地将42绑定到foo并在绑定的函数对象上启动线程.

像这样的东西:

boost::function< void > f = boost::bind( foo, 42 );
boost::thread( attrs, f )
上一篇:c – 静态Const成员初始化和模板(与静态功能相比) – 这是如何工作的?


下一篇:C编译中有哪些不同的令牌类型?