Wie können Sie die Werte in einem Parameterpaket einer variadischen Vorlage static_assert?
Ich erstelle eine variable Vorlage.
Sagen wir, ich habe so etwas:
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... };
// ...
}
Instanzen dieser Klasse können wie folgt instanziiert werden:
Sequence<uint32_t, 1, 2, 3, 42, 25> seq;
Ich möchte sicherstellen, dass bei der Kompilierung ein @ verwendet wirstatic_assert
dass dienumbers
as @ -Parameterpaket enthält nur bestimmte Zahlen. Nehmen wir für dieses Beispiel an, ich möchte nur @ zulasse0
oder1
.
So würde ich gerne etwas machen wie:
for (size_t i = 0; i < count; i++) {
static_assert(numbers[i] == 1 || numbers[i] == 0, "Only ones and zeroes are allowed.");
}
Aber offensichtlich,static_assert
funktioniert nicht mit einemfor
loop. Ich bin mir ziemlich sicher, dass es eine Art Syntax dafür geben muss, aber ich konnte es nicht herausfinden.
Ich würde lieber etwas verwenden, das mit einem C ++ 11-Compiler kompiliert wird (oder vielleicht mit einem C ++ 14-Compiler, wenn dies in C ++ 11 nicht möglich ist).