【问题标题】:Template specialization for union type联合类型的模板特化
【发布时间】:2019-05-09 17:39:58
【问题描述】:

如何为union 类型专门化模板?假设我有模板函数

template <typename T>
void foo(T value);

如果T 不是任何union 类型,我想禁止调用此函数。我怎样才能做到这一点?

【问题讨论】:

    标签: c++ templates union sfinae


    【解决方案1】:

    如果 T 不是任何联合类型,我想禁止调用此函数。我怎样才能做到这一点?

    也许std::is_union

    template <typename T>
    std::enable_if_t<std::is_union<T>::value> foo(T value)
     { /* ... */ }
    

    【讨论】:

      【解决方案2】:

      为此,您可以使用 std::enable_if (std::enable_if_t) 和 std::is_union 中的 &lt;type_traits&gt;。比如:

      template <class T,
         typename std::enable_if_t<std::is_union<T>::value,
         int> = 0>
         void foo(T t) {
         // an implementation for union types
      }
      

      这里是SFINAE 规则的解释。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-25
        • 1970-01-01
        • 2021-12-14
        • 2017-07-18
        相关资源
        最近更新 更多