Templates and generic programming
T.42
Используйте псевдонимы шаблонов для упрощения записи и скрытия деталей реализации
Причина
Улучшение читаемости. Скрытие реализации. Обратите внимание, что псевдонимы шаблонов заменяют многие случаи использования трейтов для вычисления типа. Они также могут использоваться для обёртывания трейта.
Пример
template<typename T, size_t N>
class Matrix {
// ...
using Iterator = typename std::vector<T>::iterator;
// ...
};
Это избавляет пользователя Matrix от необходимости знать, что его элементы хранятся в vector, а также от многократного написания typename std::vector<T>::.
Пример
template<typename T>
void user(T& c)
{
// ...
typename container_traits<T>::value_type x; // плохо, многословно
// ...
}
template<typename T>
using Value_type = typename container_traits<T>::value_type;
Это избавляет пользователя Value_type от необходимости знать технику, используемую для реализации value_type.
template<typename T>
void user2(T& c)
{
// ...
Value_type<T> x;
// ...
}
Примечание
Простое, распространённое применение можно сформулировать так: «Оборачивайте трейты!»
Контроль
- Помечать использование
typenameкак разграничителя вне объявленийusing. - ???