2010-06-14 101 views
3
template <class EventType> 
class IEvent; 

class IEventable; 

typedef boost::function<void (IEventable&, IEvent&)> behaviorRef; 

將模板類IEvent傳遞到提升函數的正確方法是什麼?有了這個代碼,我得到: error: functional cast expression list treated as compound expression error: template argument 1 is invalid error: invalid type in declaration before ‘;’ token將模板傳遞給提升函數

回答

5

boost::function需要,所以你不能傳遞一個模板的名字,它必須是一個模板實例。因此,無論使用特定的實例

typedef boost::function<void (IEventable&, IEvent<SomeEventType>&)> behaviorRef; 

或把整個事情本身成模板:

template< typename EventType > 
struct foo { 
    typedef boost::function<void (IEventable&, IEvent<EventType >&)> behaviorRef; 
}; 
+0

你能否提供一些樣品? – Ockonal 2010-06-14 21:05:27

+0

@Ockonal:我試過。這有幫助嗎? – sbi 2010-06-14 21:07:57

+0

是的,第二個代碼示例(關於結構)就是我需要的。謝謝。 – Ockonal 2010-06-14 21:15:29

0

類模板僅僅是一個類模板,它不是一個真正的類呢。您需要指定模板參數才能從中得到一個類,例如IEvent<int>。所以,你需要決定對哪些類型的活動你想要的類型定義是,例如用於INT:

typedef boost::function<void (IEventable&, IEvent<int>&)> behaviorRef; 

否則,如果你想爲所有可能的模板實例化一個typedef,你需要把typedef的自己變成另一個模板類。看到sbi的答案就是一個例子。

+0

實際上它被稱爲「類模板」(而不是「模板類」) - 就像你寫的那樣,因爲它確實是_template_而不是_class_。 – sbi 2010-06-14 21:09:27

+0

@sbi:改變了這一點 – sth 2010-06-14 21:11:12