.template (dot-template) construction usage
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Where and why do I have to put the “template” and “typename” keywords?
我遇到了一段奇怪的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <iostream> template <int N> struct Collection { int data[N]; Collection() { for(int i = 0; i < N; ++i) { data[i] = 0; } }; void SetValue(int v) { for(int i = 0; i < N; ++i) { data[i] = v; } }; template <int I> int GetValue(void) const { return data[I]; }; }; template <int N, int I> void printElement(Collection<N> const & c) { std::cout << c.template GetValue() << std::endl; /// doesn't compile without".template" } int main() { Collection<10> myc; myc.SetValue(5); printElement<10, 2>(myc); return 0; } |
未在printElement函数中使用.template关键字编译它。我以前从未见过这种情况,我不明白需要什么。尝试删除它时,我遇到了很多与模板相关的编译错误。所以我的问题是什么时候使用这种结构?常见吗?
没有
1 | c.GetValue() //without template keyword |
可以解释为:
1 2 | //GetValue is interpreted as member data, comparing it with I, using < operator ((c.GetValue) < I) > () //attempting to make it a boolean expression |
也就是说,
有关详细解释,请阅读以下接受的答案:
- 我为什么要把"模板"和"类型名"关键字放在哪里?