2013-03-22 57 views
1

我得到了下面的函數建立時生成錯誤信號slot_type:的boost ::與模板

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) 

但是這只是產生了另一個錯誤。

+1

在某處粘貼'typename'關鍵字 - 通常有幫助;) – sje397 2013-03-22 13:23:05

+0

還有什麼錯誤? – bobah 2013-03-22 13:24:02

回答

5

告訴大家,它與typename一種編譯器:

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

的問題是,signal_t取決於模板參數T,所以你需要明確地告訴signal_t::slot_type將是一個類型的編譯器。