Vorlagen-Metaprogrammierung ist eine Metaprogrammiertechnik, bei der Vorlagen von einem Compiler verwendet werden, um temporären Quellcode zu generieren, der vom Compiler mit dem Rest des Quellcodes zusammengeführt und dann kompiliert wird.
Ist es möglich, eine Vorlage zu schreiben, die das Verhalten ändert, je nachdem, ob eine bestimmte Elementfunktion für eine Klasse definiert ist? Hier ist ein einfaches Beispiel dafür, was ich schreiben möchte: template<class T> std::string optionalToString(T* obj) { if (FUNCTION_EXISTS(T->toString)) return obj->toString(); else return "toString not defined"; } Wenn also …
Wie kann ich über ein Tupel iterieren (mit C ++ 11)? Ich habe folgendes versucht: for(int i=0; i<std::tuple_size<T...>::value; ++i) std::get<i>(my_tuple).do_sth(); aber das funktioniert nicht: Fehler 1: Entschuldigung, nicht implementiert: 'Listener ...' kann nicht in eine Argumentliste mit fester Länge erweitert werden. Fehler 2: Ich kann nicht in einem konstanten Ausdruck …
Mir wurde gesagt, dass das Vorlagensystem in C ++ zur Kompilierungszeit Turing-vollständig ist. Dies wird in diesem Beitrag und auch auf Wikipedia erwähnt . Können Sie ein nicht triviales Beispiel für eine Berechnung liefern, die diese Eigenschaft ausnutzt? Ist diese Tatsache in der Praxis nützlich?
Die Frage ist unten fett gedruckt, das Problem wird auch durch das Destillationscodefragment gegen Ende zusammengefasst. Ich versuche, mein Typsystem (das Typsystem wechselt vom Typ zum String) zu einer einzigen Komponente (wie von Lakos definiert) zu vereinheitlichen. Ich benutze boost::array, boost::variantund boost::mpl, um dies zu erreichen. Ich möchte die Parser- …
PRÄMISSE: Nachdem ich ein wenig mit verschiedenen Vorlagen herumgespielt hatte, wurde mir klar, dass es bald ziemlich umständlich wird, etwas zu erreichen, das etwas über die trivialen Metaprogrammieraufgaben hinausgeht. Insbesondere fand ich mich für eine Art und Weise will auszuführen generische Operationen über ein Argument Pack wie Iterierte , Split …
Ich habe den zweiten Teil von Walter Browns CppCon2014-Vortrag über Template-Metaprogrammierung gesehen , in dem er die Verwendung seiner neuartigen void_t<>Konstruktion diskutierte . Während seines Vortrags stellte Peter Sommerlad ihm eine Frage, die ich nicht ganz verstand. (Link geht direkt auf die Frage, der diskutierte Code fand direkt davor statt) …
Ich habe eine Funktion, die mehrdimensional ist std::vectorund erfordert, dass die Tiefe (oder die Anzahl der Dimensionen) als Vorlagenparameter übergeben wird. Anstatt diesen Wert fest zu codieren, möchte ich eine constexprFunktion schreiben , die die std::vectorund die Tiefe als unsigned integerWert zurückgibt . Zum Beispiel: std::vector<std::vector<std::vector<int>>> v = { { …
Kann mir jemand erklären, warum die erste Meta-Programmiermethode für Vorlagen in eine Endlosschleife geht, die zweite jedoch korrekt ausgeführt wird. #include <iostream> using namespace std; template<int N, int M> struct commondivs { static const int val = (N<M) ? commondivs<N,(M-N)>::val : commondivs<(N-M),M>::val; }; template<int N> struct commondivs<N,N> { static const …
Ist es auch möglich, diese Prädikate für Algorithmen zur Kompilierungszeit wiederzuverwenden, da Konzepte als Prädikate zur Kompilierungszeit definiert sind? Wäre es beispielsweise möglich zu überprüfen, ob alle Typen in einem Tupel einem Konzept entsprechen? Soweit ich gesehen habe, ist es nicht möglich, ein Konzept in irgendeiner Weise an eine Funktion …
Ist der folgende Code legitim? template <int N> class foo { public: constexpr foo() { for (int i = 0; i < N; ++i) { v_[i] = i; } } private: int v_[N]; }; constexpr foo<5> bar; Clang akzeptiert es, aber GCC und MSVC lehnen es ab. Der Fehler von …
Ich versuche, einen Wrapper bereitzustellen, um std::invokeden Funktionstyp auch dann abzuleiten, wenn die Funktion überlastet ist. (Ich habe gestern eine verwandte Frage für die Variadic- und Methodenzeigerversion gestellt). Wenn die Funktion ein Argument hat, funktioniert dieser Code (C ++ 17) unter normalen Überlastbedingungen wie erwartet: #include <functional> template <typename ReturnType, …
Ich versuche zu verstehen, was Metaprogrammierung allgemein und was es in C ++ im Besonderen ist. Wenn ich nach C ++ - Metaprogrammierung suche, erhalte ich Tutorials zur Vorlagenmetaprogrammierung (TMP), aber keine Erklärung, ob nur eine bestimmte Verwendung von Vorlagen oder alle Verwendungen von Vorlagen kategorisiert werden. Meine Frage ist, …
Ich möchte die Funktion atoi () zur Kompilierungszeit implementieren (in C ++ - Sprache unter Verwendung des C ++ 11- oder C ++ 14-Standards). Es sollte also in der Lage sein, in doppelten Anführungszeichen eingeschlossenen Text als Zahl zu analysieren oder einen Fehler zu melden. Insbesondere ist es Teil eines …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.