Информация об изменениях

Сообщение Re: выделить тип из optional который сам template type от 01.02.2024 21:27

Изменено 01.02.2024 21:33 rg45

Re: выделить тип из optional который сам template type
Здравствуйте, The Passenger, Вы писали:

TP>1. Как определить что тип optional?


http://coliru.stacked-crooked.com/a/6f6551277ce4b161

template <typename, template <typename...> class> struct is_instance_of : std::false_type {};
template <template <typename...> class T, typename...X> struct is_instance_of<T<X...>, T> : std::true_type {};
template <typename T, template <typename...> class TT> concept instance_of = is_instance_of<T, TT>::value;

static_assert(instance_of<std::optional<int>, std::optional>);
static_assert(instance_of<std::string, std::basic_string>);
static_assert(instance_of<std::map<int, double>, std::map>);
Re: выделить тип из optional который сам template type
Здравствуйте, The Passenger, Вы писали:

TP>1. Как определить что тип optional?


http://coliru.stacked-crooked.com/a/6f6551277ce4b161

template <typename, template <typename...> class> struct is_instance_of : std::false_type {};
template <template <typename...> class T, typename...X> struct is_instance_of<T<X...>, T> : std::true_type {};
template <typename T, template <typename...> class TT> concept instance_of = is_instance_of<T, TT>::value;

static_assert(instance_of<std::optional<int>, std::optional>);
static_assert(instance_of<std::string, std::basic_string>);
static_assert(instance_of<std::map<int, double>, std::map>);


Если optional интересует болльше других типов, разумеется, можно определить специальный концепт:

[/cpp]
template <typename T> concept is_optional = std::instance_of<T, std::optional>;
[/cpp]

Понятное дело, можно обойтись и без концептов, привычными метафункциями.