2010-06-14 137 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