Wie kann mit static_assert die Reihenfolge des Vorlagenparameterpakets sichergestellt werden?C++

Programme in C++. Entwicklerforum
Anonymous
 Wie kann mit static_assert die Reihenfolge des Vorlagenparameterpakets sichergestellt werden?

Post by Anonymous »

Nehmen wir an, ich habe den folgenden Code:

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;
}
Gibt es eine Möglichkeit, während der Kompilierungszeit sicherzustellen (

Code: Select all

static_assert
), dass die Instanzen von Field, die an den Row-Konstruktor übergeben werden, ihren FieldOrder-Vorlagenparameter in derselben Reihenfolge haben wie die FieldOrder-Enum-Klasse?
Zum 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)};
Hinweise:
  • 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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post