Использование типов, определенных в аргументах шаблона - PullRequest
1 голос
/ 12 апреля 2009

При использовании класса контейнера, например vector, list и т. Д., Я могу использовать тип элементов, написав vector<type>::value_type.

Однако следующий код

template<class container>
void foo(container& c)
{
    typedef container::value_type elementtype;
    elementtype b;
}

завершается с ошибкой «expected initializer before ‘elementtype’». Можно ли вывести тип элемента, когда тип контейнера задан в качестве аргумента шаблона, или я должен указать тип элемента в качестве дополнительного аргумента шаблона?

1 Ответ

12 голосов
/ 12 апреля 2009

Вам не хватает необходимого ключевого слова typename:

typedef typename container::value_type elementtype;

Это потому, что container является зависимым именем в этом шаблоне, поэтому у компилятора нет возможности узнать, является ли container :: value_type всегда типом или нет, так как это может зависеть от выбора container.

Конечно, этот вопрос - где-то часто задаваемые вопросы?

Редактировать, это: http://www.parashift.com/c++-faq-lite/templates.html#faq-35.18

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...