Inkrementelles Erstellen einer Kompilierungszeitliste in C ++

Gibt es in C ++ eine Möglichkeit, eine Kompilierungszeitliste nach folgendem Muster inkrementell zu erstellen?

START_LIST(List)
ADD_TO_LIST(List, int)
ADD_TO_LIST(List, float)
ADD_TO_LIST(List, double)
END_LIST(List)

Das Ergebnis sollte äquivalent sein zu:

using List = Cons<int, Cons<float, Cons<double, Nil>>>;

Ich habe auch eine Einschränkung, dass der Abstand zwischen den Makros in jedem Bereich sein muss, in dem sich das Ganze befindet. Ich plane, Dinge zu definieren und sie gleichzeitig mit einem Makro in der Liste zu registrieren.

#define DEFINE_ELEMENT(Name, Value) \
using Name = SomeTemplate<Value>; \
ADD_TO_LIST(ListOfElements, Name)

Mit anderen Worten, es ist nicht erlaubt zu definierenSTART_LIST zu so etwas wieSomeTemplate< oderdecltype(. Das würde es unmöglich machen, dazwischen neue Definitionen hinzuzufügen.

Beachten Sie, dass die Lösung alternativ in Form einer "Parameterpaket" -Liste (Variadic Template) vorliegen kann. Es ist mir nur wichtig, dass es dem oben gezeigten inkrementellen Definitionsmuster folgt.

Könnten hier Spezialisierungen verwendet werden? Wenn es mit dem obigen Muster nicht genau möglich ist, ist es mit etwas mehr Boilerplate möglich?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage