Pergunta

Eu estou tentando usar Boost.Thread com Metrowerks CodeWarrior 5.5.3; na thread.hpp cabeçalho, eu recebo o erro que ele está redefinindo fio :: thread_data:

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();
    }
};

Eu vejo que, com efeito, linha :: thread_data parece ser declarada duas vezes. O C ++ recurso é usado lá? Como posso superar essa deficiência compilador?

Foi útil?

Solução

O segundo exemplo é uma especialização parcial da classe de modelo, este é válido C ++ e não deve resultar num erro redefinição.

Eu tive problemas com tais características em uma MetroWerks compiladores no passado muito embora, mais especificamente, ao usar parâmetros de modelo modelo com valores padrão, o compilador nunca compilá-lo. Minha solução foi bastante fácil, não fornecem um valor padrão ... (1)

Se eu fosse você eu tente adicionar uma especialização completa para o seu tipo específico, e espero que o compilador usa algum caminho de compilação diferente para aqueles e você fica passado este .... (Isto é apenas um palpite, eu não tenho / usar um Metrowerks compilador estes dias)

typedef boost::function< void () > MyThreadFunction; // or whatever you need

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

(1) Para ser honesto, isso foi há muitos anos, eu não acho que nenhum modelo de compilador compilado totalmente naquela época.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top