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

C++ error in template function call: type name is not allowed

本文关键字:类型 不允许 函数调用 C++ 错误      更新时间:2023-10-16

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

在EManager中,注册回调是按以下方式定义的:

template<TType task>
class EManager
{
public:
template<
EType event,
typename e_listener,
void (e_listener::*TMethod)()
>
static void registerCallback(e_listener& listener)
{
/* ... */
}
}

第二个模板参数与关键字类型名称e_listener,所以我不知道为什么它会报告问题。我错过了什么吗? 提前感谢您的帮助。

您应该添加template

tEManager::template registerCallback<
EVENT,
TManager,
&TManager::func>(*this);

谢谢Jarod42和克里斯。它有效!我错过了这个非常有价值的主题,其中包括"模板关键字"一章中的解决方案: 我必须在哪里以及为什么必须放置"模板"和"类型名称"关键字?