**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。
这个问题似乎与help center中定义的范围内的编程无关。
3小时前关门了。
Improve this question
我还在学习元编程,
我在上一些在线课程,
我用这个逻辑来检查类型列表中是否有一个类型。
我想知道这个元编程逻辑例程是否可以用c++20简化。任何帮助都将不胜感激。
#include<iostream>
#include<type_traits>
template<bool condition, typename THEN, typename ELSE>
struct check;
template<typename THEN, typename ELSE>
struct check<true, THEN, ELSE>{
using type = THEN;
};
template<typename THEN, typename ELSE>
struct check<false, THEN, ELSE>{
using type = ELSE;
};
template<typename...>
struct my_lst{};
template<typename L>
struct empty: std::false_type{};
template<>
struct empty<my_lst<>> : std::true_type{};
template<typename L>
struct top;
template<typename T, typename ...args>
struct top<my_lst<T, args...>>{
using type = T;
};
template<typename L>
struct pop_top;
template<typename T, typename ...args>
struct pop_top<my_lst<T, args...>>{
using type = my_lst<args...>;
};
//create some alisaes
template<typename L>
using top_t = typename top<L>::type;
template<typename L>
using pop_top_t = typename pop_top<L>::type;
template<typename L>
static constexpr bool empty_v = empty<L>::value;
template<typename SEARCH, typename L>
struct contains_type :
check< std::is_same_v<SEARCH, top_t<L>>, std::true_type, contains_type<SEARCH, pop_top_t<L>> >::type{};
template<typename SEARCH>
struct contains_type<SEARCH, my_lst<>>: std::false_type{};
int main()
{
my_lst<int, bool, double> types;
std::cout << contains_type<bool, my_lst<>>::value << '\n';
std::cout << contains_type<bool, decltype(types)>::value << '\n';
std::cout << contains_type<float, decltype(types)>::value << '\n';
}
1条答案
按热度按时间oxcyiej71#
是的,使用折叠表达式,它是c++17
或者如@AndyG,
std::disjunction
所示(也是c++17)