C++ C++;模板函数调用中出错:不允许使用类型名称

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() { /* ... */}

Diab编译器在第@@行中抱怨不允许使用该类型名称

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
视为一个值,