¿Cómo se insertan los valores estáticos en un paquete de parámetros de una plantilla variadic?
Estoy creando una plantilla variadic.
Digamos que tengo algo como esto:
template<typename T, T ... Numbers>
class Sequence final {
// Unpack parameter pack into a constexpr array
constexpr static T count = sizeof...(Numbers);
constexpr static T numbers[count] = { Numbers... };
// ...
}
Las instancias de esta clase se pueden instanciar como:
Sequence<uint32_t, 1, 2, 3, 42, 25> seq;
Me gustaría asegurarme en tiempo de compilación usando unstatic_assert
que elnumbers
El paquete de parámetros solo contiene números específicos. Por el bien de este ejemplo, digamos que solo quiero permitir0
o1
.
Entonces me gustaría hacer algo como:
for (size_t i = 0; i < count; i++) {
static_assert(numbers[i] == 1 || numbers[i] == 0, "Only ones and zeroes are allowed.");
}
Pero obviamentestatic_assert
no funciona con unfor
lazo. Estoy bastante seguro de que debe haber algún tipo de sintaxis para esto, pero no he podido resolverlo.
Prefiero usar algo que se compile con un compilador C ++ 11 (o tal vez un compilador C ++ 14, si no es factible en C ++ 11).