Angenommen, ich habe ein constexpr-Array zur Kompilierungszeit und eine variadische Klassenvorlage mit einer Reihe von Nicht-Typ-Parametern des gleichen Typs wie die Elemente des Arrays.
Mein Ziel ist es, die Klassenvorlage mit den Werten aus dem Array zu instanziieren:
%Vor% Der obige Code funktioniert gut. Ich bin jedoch ziemlich unglücklich darüber, dass ich das Array manuell indizieren muss, wenn ich die Foo
Vorlage instanziieren muss. Ich möchte, dass der Compiler das automatisch für mich erledigt:
Ich habe RTFM bei cppreference gemacht, aber das hat nicht geholfen. Ich kenne std::forward<>()
, kann aber nicht auf Vorlagenargumentlisten angewendet werden.
Ändern Sie makeContainer
in ein struct
mit einem constexpr operator()
oder einem constexpr
lambda (C ++ 17) . Ein Funktionszeiger funktioniert hier nicht.
Verwenden Sie std::make_index_sequence
und std::index_sequence
, um eine Kompilierungssequenz der Indizes zu generieren:
Erstellen Sie eine neue Containerinstanz constexpr
bis C
und erweitern Sie dann die Sequenz, um die Elemente in einem konstanten Ausdruck zu indizieren:
vollständiges Beispiel auf wallbox.org
Nur zum Spaß, hier ist eine C ++ 20-Implementierung:
%Vor%Tags und Links c++ templates variadic-templates constexpr template-meta-programming