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
答案 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的答案。