Архив

Архив Март 2011

typename

впервые столкнулся с ключевым словом typename
прочитать что это и зачем можно здесь:
http://alenacpp.blogspot.com/2006/08/typename.html

а я столкнулся при портировании проекта из MS VC++ 2008 под Linux g++ 4.4.5

пример:
template
void function(T1& src, unsigned int n)
{
...
std::map ::iterator I;
...
}

VC++ всем доволен, а вот g++ на эту строчку ругнулся
error: expected ‘;’ before ‘I’

получается компилятор не может понять что от него хотят, т.о. для исправления ошибки необходимо в начале строчки прописать typename:
typename std::map ::iterator I;
и всё в шоколаде :)

аналогично решается ошибка в строке:
for(T1::iterator I = src.begin(); I != src.end(); ++I) {
добавляем
for(typename T1::iterator I = src.begin(); I != src.end(); ++I) {

такие дела.

Вывод:
typename нужен для облегчения задачи компилятору при парсинге различных загадочных выражений.
Ключевое слово typename позволяет разрешить недоразумения, явно сказав компилятору, где речь идет о типе.

Categories: разработка Tags: , ,