Рассмотрим булева трюка, чтобы проверить, если куча типов все тот же тип:Bool трюк и шаблонные параметры шаблона
template<typename Type, typename... Types>
static constexpr bool allOf = std::is_same<
std::integer_sequence<bool, true, std::is_same<Type, Types>::value...>,
std::integer_sequence<bool, std::is_same<Type, Types>::value..., true>
>::value;
В качестве примера, можно использовать его как следует проверить, что все параметры является int
значения:
template<typename... Args>
void f(Args&&... args) {
static_assert(allOf<int, Args...>, "!");
// ...
}
есть ли способ, чтобы использовать его со специализациями данного параметра шаблона шаблона?
В качестве примера, со следующим кодом:
template<typename> struct S {};
template<typename... Args>
void f(Args&&... args) {
static_assert(allOf<S, Args...>, "!");
// ...
}
Переменная allOf
должна быть определена как:
template<template<typename> class Type, typename... Types>
static constexpr bool allOf = ???;
И я хотел бы, чтобы проверить, что каждый T
в Types
является конкретизацией формы S<U>
, независимо от того, что такое U
.
Возможно ли это?
что BOOL трюк приятно, кто придумал это? –
@ JohannesSchaub-litb Я не помню, где я его нашел, он был здесь, на SO так или иначе. Версия, с которой я столкнулась, была создана с использованием структур: std :: условный, std :: true_type и std: .false_type. Я начал использовать этот, когда обнаружил переменные шаблоны, более компактные, чем оригинальные. – skypjack
хороший трюк, в любом случае – max66