В типа, как в неспециализированной шаблона структуры pointer_traits
(т.е. template <class Ptr> struct pointer_traits
), существует шаблон rebind
псевдоним элемент, который определен, чтобы быть Ptr::rebind<U>
, если она существует, или какой-либо другой тип в противном случае. Хотя я видел несколько ответов на , проверив, существует ли какой-то элемент, как реализовать шаблон условного шаблона, например pointer_traits::rebind
? То есть, как если бы следующий псевдо-C++:«Условные» шаблоны псевдонимов
template <typename T> using type = has_type<T::U> ? int : float;
или
template <typename T> using type = if_has_type<T::U, int, float>::type;
Я рассматривал что-то вроде способа, изображенного на https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Member_Detector (раздел «Обнаружение типов элементов»), но я не» t знать, как реализовать вспомогательную структуру, чей тип члена [sole] зависит от существования другого типа элемента.
Я думаю, цит больше интересует, как условие будет выглядеть, а не станд :: условной – WorldSEnder
Реализация 'станд :: conditional' кажется легко понять, но как' is_detected' работа? Кроме того, хотя я являюсь поклонником новых возможностей C++ 17, «pointer_traits» был реализован на C++ 11. Не используя [экспериментальные] возможности C++ 17, как реализовать это? –
@AliciaRose * Без использования [экспериментальных] возможностей C++ 17, как бы реализовать это? * Уродливо и мучительно. Вы можете найти исходный код для своей стандартной библиотеки в Интернете. – DeiDei