C++ 将模板传递到boost函数 模板 I类事件; 类可验证; typedef boost::函数行为ref;

C++ 将模板传递到boost函数 模板 I类事件; 类可验证; typedef boost::函数行为ref;,c++,function,boost,templates,C++,Function,Boost,Templates,将模板类IEvent传递到boost函数的正确方法是什么?通过这段代码,我得到: 错误:函数强制转换表达式列表被视为复合表达式 错误:模板参数1无效 错误:“;”之前的声明中的类型无效令牌boost::function需要一个类型,因此您不能向其传递模板名称,它必须是模板实例。因此,要么使用特定实例 template <class EventType> class IEvent; class IEventable; typedef boost::function<void

将模板类IEvent传递到boost函数的正确方法是什么?通过这段代码,我得到:
错误:函数强制转换表达式列表被视为复合表达式
错误:模板参数1无效

错误:“;”之前的声明中的类型无效令牌

boost::function
需要一个类型,因此您不能向其传递模板名称,它必须是模板实例。因此,要么使用特定实例

template <class EventType>
class IEvent;

class IEventable;

typedef boost::function<void (IEventable&, IEvent&)> behaviorRef;
typedef boost::函数行为ref;
或者将整个内容本身放入模板中:

typedef boost::function<void (IEventable&, IEvent<SomeEventType>&)> behaviorRef;
template
结构foo{
typedef boost::函数行为ref;
};

类模板只是类的模板,它还不是真正的类。您需要指定模板参数以从中获取类,例如
IEvent
。因此,您需要决定要将typedef设置为哪种类型的事件,例如int:

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

否则,如果您想为所有可能的模板实例化使用typedef,则需要将typedef本身放入另一个模板化类中。请参见sbi的答案,以获取示例。

您能提供一些示例吗?是的,第二个代码示例(关于结构)是我需要的。谢谢。实际上它被称为“类模板”(而不是“模板类”)——正如您所写的,这是因为它确实是一个模板,而不是一个类。
typedef boost::function<void (IEventable&, IEvent<int>&)> behaviorRef;