将模板传递给boost函数

时间:2010-06-14 21:02:20

标签: c++ function boost templates

template <class EventType>
class IEvent;

class IEventable;

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

将模板类IEvent传递给boost函数的正确方法是什么?使用此代码,我得到: error: functional cast expression list treated as compound expression error: template argument 1 is invalid error: invalid type in declaration before ‘;’ token

2 个答案:

答案 0 :(得分:5)

boost::function需要类型,因此您无法传递模板的名称,它必须是模板实例。所以要么使用特定的实例

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

或将整个事物本身放入模板中:

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

答案 1 :(得分:0)

类模板只是一个类的模板,它还不是一个真正的类。您需要指定模板参数以从中获取类,例如IEvent<int>。因此,您需要确定您希望typedef为哪种事件,例如int:

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

否则,如果您想要一个typedef用于所有可能的模板实例化,则需要将typedef本身放入另一个模板化类中。有关这方面的例子,请参阅sbi的答案。