我想了解在哪裏使用template
和typename
,我遇到了一個我無法解決的問題。我有一個模板函數f<T>
,它使用傳遞給它的類型(它將是一個類)來調用模板成員函數.f<T>
。我想我的函數體中使用的typename
是正確的,不過,我不斷收到以下錯誤:爲什麼我得到錯誤「非模板」f用作模板「
source.cpp: In function
'void f()'
:
source.cpp:11:19: error: non-template'f'
used as template
source.cpp:11:19: note: use'typename T::C::template f'
to indicate that it is a template
struct A {
struct C {
template <typename T> void f() {}
};
};
template <typename T> void f() {
typename T::C::f<int>();
}
int main() {
f<A>();
}
注意如何在最後一個錯誤是建議使用'typename T::C::template f'
代替。所以,我提出按照以下變化:
// ...
typename T::C::template f<int>();
// ...
我照它說,後來我收到錯誤的下一行:
error: no class template named
'f'
in'struct A::C'
我認爲這個錯誤是在有是不正確實際上是一個名爲f
的公共模板函數struct A::C
。我在這裏做錯了什麼?
如果我們拿走了'static',會是什麼我們必須這樣做才能調用'f'? –
所以你的意思是'T :: C->模板f();'? –
@ user6607我更新了答案,閱讀。 –