Я не знаю каких-либо шаблонов в стандартной библиотеке C++, которые заданы для принятия шаблона шаблона, но в C++ 11 есть хотя бы один стандартный шаблон, который имеет частичную специализацию с шаблоном параметр шаблона: std::pointer_traits
. std::pointer_traits<Ptr>::element_type
указано:
Ptr::element_type
если такой тип существует; в противном случае T
, если Ptr
- это экземпляр шаблона класса формы SomePointer<T, Args>
, где Args
- это ноль или более аргументов типа; в противном случае специализация плохо сформирована.
Для реализации этого вам нужен параметр шаблона шаблон для SomePointer
, потому что это может быть шаблон произвольного класса (до тех пор, как он только имеет тип параметров шаблона, чтобы быть точным). Ниже приведена частная специализация класса вспомогательных классов libstdC++:
template<template<typename, typename...> class _SomePtr, typename _Tp,
typename... _Args>
struct __ptrtr_elt_type<_SomePtr<_Tp, _Args...>, false>
{
typedef _Tp __type;
};
Некоторые шаблоны контейнеров имеют конструкторы шаблонов. – GingerPlusPlus
@GingerPlusPlus: шаблон конструктора не является параметром шаблона шаблона. –
Я думаю, что в STL нет шаблонов шаблонов шаблонов шаблонов. Потому что это нарушит философию «Контейнеры» <-> Итераторы <-> Алгоритмы'. – 101010