Я получаю ошибку сборки при сборке для следующей функции:
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)
Но это просто производит другую ошибку.
Скажите компилятору, что это тип с typename
:
connection_t connect(typename signal_t::slot_type subscriber){
return signal.connect(subscriber);
}
Проблема в том, что signal_t
зависит от параметра шаблона T
и поэтому вам нужно явно указать компилятору, что signal_t::slot_type
будет типом.
Других решений пока нет …