我有DefineEvent
类模板,可用于简化新事件类的定义。看起来像这样(我知道很多毛):
template<class EventClass, class... Parents>
class DefineEvent : public virtual Event, public Parents...
{
public:
DefineEvent()
{
static const EventTypeInfo& info = TypeInfoParentSetter<EventClass>
::SetOnce<Parents...>(TypeInfoHolder<EventClass>::Instance());
}
};
我在那里使用的
TypeInfoParentSetter
类如下所示:template<class EventClass>
class TypeInfoParentSetter
{
public:
template<class... Parents>
static const EventTypeInfo& SetOnce(TypeInfoHolder<EventClass>& holder)
{
// ...
}
};
我收到一个指向
::SetOnce<Parents...>
中DefineEvent()
行的编译错误,告诉我编译器“在'...'标记之前预期了主表达式”。我该如何解决?您可以在上下文here中查看代码,但请注意它非常难看。
最佳答案
您需要包括一个template关键字来表示嵌套名称为template:
DefineEvent()
{
static const EventTypeInfo& info = TypeInfoParentSetter<EventClass>
:: template SetOnce<Parents...>(TypeInfoHolder<EventClass>::Instance());
}
而您忘记了将成员函数
TypeInfoParentSetter<EventClass>::Set
设为静态: template<class... Parents>
static TypeInfoParentSetter<EventClass> Set(TypeInfoHolder<EventClass>& holder)
{
std::cout << "ParentSetter()\n";
return TypeInfoParentSetter<EventClass>();
}
检查它:http://ideone.com/sNHMX