Возвращает значение типа, определенного в шаблоне класса

#c #class #templates #visual-c #return-type

#c #класс #шаблоны #visual-c #возвращаемый тип

Вопрос:

Я новичок в C и пытаюсь вернуть значение из size() члена моего X класса; возвращаемый тип должен быть of X::size_type .

 template <class T> class X {
public:
    typedef size_t size_type;
    size_type size() const;
    // ...
}

template <class T> X<T>::size_type X<T>::size() const {
    // ...
}
  

Приведенный выше код приводит к ошибкам. Я добавил typename ранее X<T>::size_type , и проблема, похоже, исправлена, но я не понимаю, почему…

Это правильный путь?

Комментарии:

1. Да, имя типа здесь правильно.

Ответ №1:

Из-за сложного и иногда неоднозначного синтаксиса C иногда для синтаксического анализатора / компилятора требуются подсказки.

В общем случае при обращении к типам, определенным внутри класса, typename необходимо намекнуть компилятору, что вы говорите о типе, а не о значении (поскольку X<T>::size_type может быть и то, и другое).