мы можем использовать ключевое слово C ++ "typename" без шаблонов? - PullRequest
0 голосов
/ 21 апреля 2020

Я видел этот код в заголовочном файле.

using pointIndex = typename std::pair<std::vector<double>, size_t>;
  1. Можем ли мы использовать "typename" здесь без шаблона?
  2. Нужно ли здесь использовать typename?
  3. В чем разница между "typedef" и "typename"?

1 Ответ

5 голосов
/ 21 апреля 2020

typename и typedef - это совершенно разные вещи.

typedef - ключевое слово, используемое для введения псевдонима типа ( введите def inition). В последних стандартах вы также можете использовать using для этого. Итак:

typedef int MyThing;

// or
using MyThing = int;

typename - это ключевое слово, которое говорит: «следующая вещь - это тип». Он используется при работе с шаблонами в некоторых ситуациях, как в объявлениях шаблонов (например, template <typename T> void foo() { /*..*/ }), так и , чтобы помочь анализатору в некоторых ситуациях . В приведенном вами примере это допустимо, но избыточно .

Эти две вещи совершенно разные и, следовательно, не взаимозаменяемы.

...