Возможный дубликат:
Где и почему мне нужно поставить ключевые слова "template" и "typename" ?
Я столкнулся с странным сегментом кода:
#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<I>() << std::endl; /// doesn't compile without ".template"
}
int main() {
Collection<10> myc;
myc.SetValue(5);
printElement<10, 2>(myc);
return 0;
}
Он не скомпилирован без ключевого слова .template в функции printElement. Я никогда не видел этого раньше, и я не понимаю, что нужно. Пытаясь удалить его, у меня появилось много ошибок компиляции, связанных с шаблонами. Так мой вопрос, когда такая конструкция используется? Это распространено?