对应 std::enable_if_t
Counterpart to std::enable_if_t
如果某个值是真的,std::enable_if_t
会给你一个类型。现在,如果表达式格式正确,我想要一个可以为您提供类型的东西。如果我要的类型是void
,我可以做到decltype((void)(expr))
。但是如果我想要void
以外的东西怎么办?我想要一个简洁优雅的解决方案。
你可以这样使用:
template<typename T>
struct well_formed : std::true_type{};
然后将其与 enable_if_t
合并
不清楚你想如何使用它,但你可以概括 std::void_t
:
template<typename T, typename...> struct helper { using type = T; };
template<typename T, typename...Ts>
using type_t = typename helper<T,Ts...>::type;
(由于this standards defect,可能需要助手)
然后像这样使用它:
type_t<int, decltype(expr)>
std::enable_if_t
会给你一个类型。现在,如果表达式格式正确,我想要一个可以为您提供类型的东西。如果我要的类型是void
,我可以做到decltype((void)(expr))
。但是如果我想要void
以外的东西怎么办?我想要一个简洁优雅的解决方案。
你可以这样使用:
template<typename T>
struct well_formed : std::true_type{};
然后将其与 enable_if_t
不清楚你想如何使用它,但你可以概括 std::void_t
:
template<typename T, typename...> struct helper { using type = T; };
template<typename T, typename...Ts>
using type_t = typename helper<T,Ts...>::type;
(由于this standards defect,可能需要助手)
然后像这样使用它:
type_t<int, decltype(expr)>