【问题标题】:Counterpart to std::enable_if_t与 std::enable_if_t 对应
【发布时间】:2016-01-27 07:35:54
【问题描述】:

std::enable_if_t 如果某个值为真,则为您获取类型。现在,如果表达式格式正确,我想要一个可以为您提供类型的东西。如果我想要的类型是void,我可以做decltype((void)(expr))。但是如果我想要void 以外的东西,我该怎么办?我想要一个简洁优雅的解决方案。

【问题讨论】:

标签: c++14 template-meta-programming typetraits decltype enable-if


【解决方案1】:

你可以这样使用:

template<typename T>
struct well_formed : std::true_type{};

然后将其与enable_if_t结合起来

【讨论】:

  • 如果T 的格式不正确,则整个表达式编译失败,而不是返回false_type。所以它的名字不好......你还不如std::conditional_t&lt; false, decltype(expr), result_type &gt;
  • 我认为 @Yakk std::enable_if_t&lt;well_formed&lt;expr&gt;::value, result_type&gt; 非常清楚。我也喜欢你的版本,特别是因为你不需要另一个辅助结构,但我相信它有点难读。
【解决方案2】:

目前还不清楚你想如何使用它,但你可以概括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)>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多