联合类型的模板专业化

时间:2019-05-09 17:39:59

标签: c++ templates union sfinae

如何专门针对union类型的模板?假设我有模板功能

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

如果T不是任何union类型,我想禁止调用此函数。我该如何实现?

2 个答案:

答案 0 :(得分:7)

  

如果T不是任何联合类型,我想禁止调用此函数。我该如何实现?

也许和std::is_union吗?

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

答案 1 :(得分:3)

您可以将std::enable_if中的std::enable_if_tstd::is_union一起使用。像这样:

<type_traits>

这是SFINAE规则的说明。