boost::signal slot_type с шаблоном

Я получаю ошибку сборки при сборке для следующей функции:

template <class T> class Event {
public:
    typedef boost::signal<void (void*, const T)>    signal_t;
    typedef boost::signals::connection              connection_t;   

public:
    Event() { }

    connection_t connect(signal_t::slot_type subscriber){
        return signal.connect(subscriber);
    }
}

ошибка:

error: 'class boost::signal<void ()(void*, T), boost::last_value<typename boost::function_traits<void ()(void*, T)>::result_type>, int, std::less<int>, boost::function<void ()(void*, T)> >::slot_type' is not a type

Я считаю, что это как-то связано с тем, что это шаблон, но я не уверен, как это исправить. Я пытался добавить , так что

connection_t connect(signal_t::slot_type<T> subscriber)

Но это просто произвело еще одну ошибку.


person Mike    schedule 22.03.2013    source источник
comment
вставьте где-нибудь ключевое слово «typename» - часто помогает;)   -  person sje397    schedule 22.03.2013


Ответы (1)


Сообщите компилятору, что это тип с typename:

connection_t connect(typename signal_t::slot_type subscriber){
    return signal.connect(subscriber);
}

Проблема в том, что signal_t зависит от параметра шаблона T, поэтому вам нужно явно указать компилятору, что signal_t::slot_type будет типом.

person Joseph Mansfield    schedule 22.03.2013