C++ C++;模板函数调用中出错:不允许使用类型名称
Diab编译器在第@@行中抱怨不允许使用该类型名称C++ C++;模板函数调用中出错:不允许使用类型名称,c++,c++11,templates,C++,C++11,Templates,Diab编译器在第@@行中抱怨不允许使用该类型名称 template< Task TASK, Event EVENT> class TManager : public AbstractTManager, public common::ITManager { public: typedef os::EManager<TASK> tEManager; TManager() { /* ... */}
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()
{ /* ... */}
}
模板<
任务任务,
事件>
类TManager:
公共抽象管理员,
公共:ITManager
{
公众:
typedef操作系统::管理器;
TManager()
{ /* ... */}
虚拟void init()
{
注册表回调<
事件
TManager,/*@@*/
&TManager::func>(*此);
}
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)
{
/* ... */
}
}
模板
类管理员
{
公众:
模板<
EType事件,
typename e_listener,
void(e_侦听器::*TMethod)()
>
静态无效寄存器回调(e_侦听器和侦听器)
{
/* ... */
}
}
第二个模板参数是带有关键字typename的e_listener,所以我不知道为什么它会报告问题。我错过什么了吗?
提前谢谢你的帮助 您应该添加
模板:
tEManager::template registerCallback<
EVENT,
TManager,
&TManager::func>(*this);
tEManager::模板注册表回调<
事件
TManager,
&TManager::func>(*此);
谢谢Jarod42和chris。它起作用了!我错过了这个非常有价值的主题,其中包括“模板关键字”一章中的解决方案:
请提供一个。可能相关:。如果编译器将tEManager
视为一个值,