Сообщение 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
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
Если optional интересует болльше других типов, разумеется, можно определить специальный концепт:
[/cpp]
template <typename T> concept is_optional = std::instance_of<T, std::optional>;
[/cpp]
Понятное дело, можно обойтись и без концептов, привычными метафункциями.
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]
Понятное дело, можно обойтись и без концептов, привычными метафункциями.