2014-08-28 3 views
7

Какие шаблоны (если есть) в стандартной библиотеке C++ имеют один или несколько параметров шаблона шаблона?Параметры шаблона шаблона в стандартной библиотеке C++?

Если их много, то несколько примеров в порядке.

Если версия C++ имеет значение, то рекомендуется использовать последний проект C++ 14/C++ 1y.

+0

Некоторые шаблоны контейнеров имеют конструкторы шаблонов. – GingerPlusPlus

+7

@GingerPlusPlus: шаблон конструктора не является параметром шаблона шаблона. –

+0

Я думаю, что в STL нет шаблонов шаблонов шаблонов шаблонов. Потому что это нарушит философию «Контейнеры» <-> Итераторы <-> Алгоритмы'. – 101010

ответ

7

Я не знаю каких-либо шаблонов в стандартной библиотеке 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; 
    }; 
+3

Строго говоря, реализация должна соответствовать описанному поведению, которое в этом случае явно не упоминает частичную специализацию. Они могут делать это любым способом, чтобы они могли, например, выберите выполнение магов. В любом случае пользователю не разрешается обнаруживать, присутствует ли такая специализация или нет. –

Смежные вопросы