首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Metrowerks编译器解决boost.thread编译错误

用Metrowerks编译器解决boost.thread编译错误
EN

Stack Overflow用户
提问于 2009-07-10 09:57:38
回答 1查看 245关注 0票数 3

我尝试在metrowerks CodeWrior5.5.3中使用boost.thread;在头文件thread.hpp中,我得到的错误是他正在重新定义thread::thread_data:

代码语言:javascript
复制
class BOOST_THREAD_DECL thread
{
private:
    ...        
    template<typename F>
    struct thread_data:
        detail::thread_data_base
    {
        F f;

        thread_data(F f_):
            f(f_)
        {}
        thread_data(detail::thread_move_t<F> f_):
            f(f_)
        {}

        void run()
        {
            f();
        }
    };
    ...
 };

template<typename F>
struct thread::thread_data<boost::reference_wrapper<F> >:
    detail::thread_data_base
{
    F& f;

    thread_data(boost::reference_wrapper<F> f_):
        f(f_)
    {}

    void run()
    {
        f();
    }
};

我看到,实际上,thread::thread_data似乎被声明了两次。这里使用的是什么C++功能?我该如何克服编译器的缺陷呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-10 11:40:23

第二个实例是模板类的部分专门化,这是有效的C++,不应导致重新定义错误。

我过去在metrowerks编译器中也遇到过这样的问题,但更具体地说,当使用带有默认值的模板参数时,编译器永远不会编译它。我的变通方法很简单,不要提供默认值...(1)

如果我是你,我会尝试为你的特定类型添加一个完整的专门化,并希望编译器对这些类型使用一些不同的编译路径,让你通过这个……(这只是一个胡乱猜测,这些天我没有/使用过metrowerks编译器)

代码语言:javascript
复制
typedef boost::function< void () > MyThreadFunction; // or whatever you need

template <>
struct thread::thread_data<boost::reference_wrapper< MyThreadFunction > >:
    detail::thread_data_base
{
    ....
};

(1)老实说,这是很多年前的事了,我不认为当时有任何编译器完全编译了模板。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1108709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档