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