Diab编译器在行@@@中抱怨该类型名称不被允许。模板函数调用中的C++错误:不允许输入类型名称
template<
Task TASK,
Event EVENT>
class TManager :
public AbstractTManager,
public common::ITManager
{
public:
typedef os::EManager<TASK> tEManager;
TManager()
{ /* ... */}
virtual void init()
{
tEManager::registerCallback<
EVENT,
TManager, /* @@@ */
&TManager::func>(*this);
}
void func()
{ /* ... */}
}
在的eManager registerCallback是这样定义的:
template<TType task>
class EManager
{
public:
template<
EType event,
typename e_listener,
void (e_listener::*TMethod)()
>
static void registerCallback(e_listener& listener)
{
/* ... */
}
}
第二个模板参数是e_listener与关键字类型名称,所以我不知道为什么它会报告问题。我错过了什么? 提前感谢您的帮助。
请提供[mcve]。 – Barry
可能相关:http://stackoverflow.com/questions/610245/where-and-why-do-i-have-to-put-the-template-and-typename-keywords。如果编译器将“tEManager”视为一个值,将<<作为小于,并将EVENT作为另一个操作数,然后将'TManager'作为逗号运算符的第二个操作数,那么错误就会适用。 – chris