TMP Algorithmus Adapter
-
(Auf die Gefahr hin, dass ich einfach nur zu müde bin um selbst drauf zu kommen)
Zugrunde liegt aktuell folgend TM-Funktion:
template <typename String, template <typename, template <typename...> class ...> class TupleAlgorithm, template <typename...> class ... AdditionalParameters> struct adapt { using type = apply_t <TupleAlgorithm <typename String::type, AdditionalParameters...>, mplex::translate>; };Diese führt den TupleAlgorithm aus auf String und den Parametern und erzeugt daraus einen neuen String.
Das funktioniert aktuell offensichtlich nur, wenn alle Parameter von TupleAlgorithm template<>class Parameter sind.
Jedoch könnte es sein, dass es sich um eine Mischung von Typen und Templates handelt, die weitergegeben werden müssen an den Algorithmus.Mir fiel jedoch auf Anhieb keine Möglichkeit ein das einfach und universell umzusetzen. (Ohne Typparameter von Hand in künstliche template<>class Parameter zu wrappen immer und immer wieder.)
Anwendungsbeispiel:
// namespace string_algorithm template <typename String, template <typename> class Predicate = is_space> struct trim_left : adapt <String, mplex::trim_left_t, Predicate> { };// namespace mplex template <typename Tuple, template <typename> class Predicate, bool Abort = false> struct trim_left { }; // implementation left outVielleicht fällt euch was elegantes ein.
-
5cript schrieb:
(Ohne Typparameter von Hand in künstliche template<>class Parameter zu wrappen immer und immer wieder.)
Der umgekehrte Weg ist zweckmäßig und wird ja u.a. auch in Boosts MPL verwendet: Templates werden in Typen gewrapped mit einheitlichenm Interface (Membertemplate apply).
-
So umgesetzt hat das noch viel mehr Vorteile.
Ich habe nun alles diesgehend umgebaut.