Параметр typename
Параметр typename в C++ применяется в двух основных случаях.
Во-первых, он используется для объявления параметра шаблона,
который должен быть типом (аналогично ключевому слову class).
Во-вторых, он применяется перед зависимыми именами внутри шаблонов,
чтобы компилятор мог понять, что некоторое имя является типом,
а не переменной или функцией. Это особенно важно при работе
с вложенными типами, зависящими от параметров шаблона.
Синтаксис
template <typename T>
// объявление параметра шаблона
typename T::value_type v;
// указание, что зависимое имя - это тип
Пример
Давайте объявим простой шаблон функции с параметром typename,
который принимает два значения одного типа и возвращает их сумму:
#include <iostream>
using namespace std;
template <typename T>
T sum(T a, T b)
{
return a + b;
}
int main()
{
cout << sum(1, 2) << endl;
cout << sum(1.5, 2.5) << endl;
return 0;
}
Результат выполнения кода:
3
4
Пример
Давайте рассмотрим случай, когда typename необходим
для указания зависимого типа. Внутри шаблона обратимся
к вложенному типу value_type контейнера:
#include <iostream>
#include <vector>
using namespace std;
template <typename Container>
void printFirst(const Container& c)
{
typename Container::value_type first = c[0];
cout << first << endl;
}
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
printFirst(vec);
return 0;
}
Результат выполнения кода:
1
Смотрите также
-
ключевое слово
template,
которое объявляет шаблон -
ключевое слово
template class,
которое объявляет шаблонный класс -
концепция
specialization,
которая задает особую реализацию шаблона -
концепция
alias template,
которая создает псевдоним шаблона