Erweitern eines consExpr-Arrays in eine Gruppe von nicht typisierten Vorlagenparametern

8

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:

%Vor%

Ich habe RTFM bei cppreference gemacht, aber das hat nicht geholfen. Ich kenne std::forward<>() , kann aber nicht auf Vorlagenargumentlisten angewendet werden.

>     
Pavel Kirienko 13.11.2017, 11:45
quelle

1 Antwort

7
  1. Ändern Sie makeContainer in ein struct mit einem constexpr operator() oder einem constexpr lambda (C ++ 17) . Ein Funktionszeiger funktioniert hier nicht.

    %Vor%
  2. Verwenden Sie std::make_index_sequence und std::index_sequence , um eine Kompilierungssequenz der Indizes zu generieren:

    %Vor%
  3. Erstellen Sie eine neue Containerinstanz constexpr bis C und erweitern Sie dann die Sequenz, um die Elemente in einem konstanten Ausdruck zu indizieren:

    %Vor%

vollständiges Beispiel auf wallbox.org

Nur zum Spaß, hier ist eine C ++ 20-Implementierung:

%Vor%

Live-Beispiel auf wandbox.org

    
Vittorio Romeo 13.11.2017, 12:17
quelle