Специализация шаблона для типа объединения - PullRequest
3 голосов
/ 09 мая 2019

Как я могу специализировать шаблон для union типов? Предположим, у меня есть функция шаблона

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

Я хочу запретить вызов этой функции, если T не относится к типу union. Как мне этого добиться?

Ответы [ 2 ]

7 голосов
/ 09 мая 2019

Я хочу запретить вызов этой функции, если T не является типом объединения.Как мне этого добиться?

Может быть с std::is_union?

template <typename T>
std::enable_if_t<std::is_union<T>::value> foo(T value)
 { /* ... */ }
3 голосов
/ 09 мая 2019

Для этого вы можете использовать std::enable_if (std::enable_if_t) с std::is_union из <type_traits>. Что-то вроде:

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 .

...