Сохраняйте изменчивость во вложенных типах

Я пробовал предыдущий ответ и был не очень успешным.

Сделайте это: -

установите инструменты разработчика Eclipse Java EE с помощью Eclipse -> Справка -> Установить новое программное обеспечение -> Работа с -> (ваш репозиторий загрузки Eclipse версии, например: ) Indigo.

В поле «Тип фильтра» установите флажок «Инструменты разработчика Eclipse Java EE».

Загрузите и установите его. Больше проблем.

1
задан wimalopaan 28 February 2019 в 10:02
поделиться

2 ответа

using n = typename std::conditional< std::is_volatile<T>::value, 
            volatile typename T::type,
            typename T::type >::type;

Добавляет volatile в n, если T равно volatile.

0
ответ дан P.W 28 February 2019 в 10:02
поделиться

Для приколов. Если вам нужно часто делать подобные вещи, можно заключить их в мета-функцию. Вот возможная реализация в :

#include <type_traits>

template<class Trait, typename=void>
struct propogate_cv_to_type{};

template<class Trait>
struct propogate_cv_to_type<Trait, std::void_t<typename Trait::type>>
{ using type = typename Trait::type; }; 

template<class Trait>
struct propogate_cv_to_type<Trait const, std::void_t<typename Trait::type>>
{ using type = typename Trait::type const; }; 

template<class Trait>
struct propogate_cv_to_type<Trait volatile, std::void_t<typename Trait::type>>
{ using type = typename Trait::type volatile; }; 

template<class Trait>
struct propogate_cv_to_type<Trait const volatile, std::void_t<typename Trait::type>>
{ using type = typename Trait::type const volatile; }; 

Это дружественно к SFINAE, поэтому, если передаваемый тип не имеет члена ::type, он тоже не будет. В противном случае он выставляет тот же тип, перенаправляя на него квалификаторы.

Вот это , когда применяется к вашему примеру.

0
ответ дан StoryTeller 28 February 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: