Re[8]: Философско-практические вопросы про метапрограммирова
От: sergii.p  
Дата: 09.02.23 16:20
Оценка:
Здравствуйте, rg45, Вы писали:

R>
R>template <typename T>
R>auto consider_sorted_range(const T&) -> std::false_type;

R>// For standard containers, the traits must be defined beforehand
R>template <typename K, typename T, typename C, typename A>
R>auto consider_sorted_range(const std::map<K, T, C, A>&) -> std::true_type;

R>template <typename K, typename T, typename C, typename A>
R>auto consider_sorted_range(const std::multimap<K, T, C, A>&) -> std::true_type;

R>template <typename T, typename C, typename A>
R>auto consider_sorted_range(const std::set<T, C, A>&) -> std::true_type;

R>template <typename T, typename C, typename A>
R>auto consider_sorted_range(const std::multiset<T, C, A>&) -> std::true_type;

R>template <typename T>
R>using is_sorted_container = decltype(consider_sorted_range(std::declval<T>()));

R>


можно несколько короче

template <typename, template <typename...> typename>
struct is_instance : std::false_type {};

template <typename T, template <typename...> typename U>
struct is_instance<U<T>, U> : std::true_type {};

template <typename T>
using is_sorted_container = std::bool_constant<is_instance<T, std::set>::value
                                            && is_instance<T, std::map>::value
                                            && is_instance<T, std::multi_map>::value
                                            && is_instance<T, std::multi_set>::value>;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.