Code: Select all
#include
#include
#include
using namespace std::literals;
using known_types_t = std::variant;
enum class FieldOrder { A, B, C };
template struct Field {
Field(const T &&v, const std::string &&h) : value(v), header(h) {}
T value;
const std::string header;
};
template struct Row {
Row(F &&...fields) : arr{fields.value...}, header{fields.header...}
{
// static_assert();
}
std::array arr;
std::array header;
};
int main() {
Row row{Field(1, "Integers"s),
Field(2.0, "Doubles"s),
Field('A', "Chars"s)};
return 0;
}
Code: Select all
static_assertZum Beispiel würde der obige Code kompiliert, während Folgendes fehlschlagen würde:
Code: Select all
Row row{Field(1, "Integers"s),
Field(2.0, "Doubles"s),
Field('A', "Chars"s)};
- Eine Lücke wäre ebenfalls ein Fehler. Die Enum-Klasse wird wie angezeigt verwendet, beginnend bei 0 und fortlaufend.
- Mich interessiert nicht, ob dies ein guter Ansatz ist. Ich habe bereits einen anderen Ansatz gewählt, bin aber immer noch neugierig, ob es möglich war.
Mobile version