4
爲什麼會出現此錯誤,我該如何解決?此模板代碼中的「預期表達式」錯誤
template<typename T>
struct foo {
template<size_t N>
void hello() {}
};
template<typename T>
struct bar {
void world() {
foo<T> f;
f.hello<0>(); //Error: Expected expression
}
};
好吧,似乎工作,但爲什麼這需要?爲什麼C++不像以前那樣理解它?在這裏只有一個hello成員模板函數... – 7cows 2013-05-12 15:13:04
@ 7cows:那麼,在解析模板時(所以*之前*您實際上是用一個特定的'T'實例化模板),編譯器不知道定義'foo'真的很像。它可能有一個名爲'hello'的數據成員(比如說)'int'(在這種情況下'f.hello <0> ...'可能是'(f.hello < 0) > ...'),或者是一個被調用的成員函數'hello',具體取決於'T'。 –
2013-05-12 15:17:40
@ 7cows:是的,有一個'hello'模板,但'foo'可能專用於某些'T',並且專用的'foo'的定義可能看起來完全不同於主模板(例如,它可以有''int'類型的'hello'數據成員而不是'hello'成員函數模板 – 2013-05-12 15:18:59