Als «template-meta-programming» getaggte Fragen

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.

27
Vorlagenprüfung für das Vorhandensein einer Klassenmitgliedsfunktion?
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 …

20
Wie können Sie die Elemente eines std :: tuple durchlaufen?
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 …


1
mehr Geisteswahnsinn - Parser-Typen (Regeln vs int_parser <>) und Meta-Programmiertechniken
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- …

5
Wie kann man generische Berechnungen über heterogene Argumentpakete einer variablen Vorlagenfunktion durchführen?
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 …

1
void_t "kann Konzepte implementieren"?
Ich habe den zweiten Teil von Walter Browns CppCon2014-Vortrag über Template-Metaprogrammierung gesehen , in dem er die Verwendung seiner neuartigen void_t&lt;&gt;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) …

3
Wie kann ich die Tiefe eines mehrdimensionalen std :: vector zur Kompilierungszeit ermitteln?
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&lt;std::vector&lt;std::vector&lt;int&gt;&gt;&gt; v = { { …

4
Vorlagen-Meta-Programmierung
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 &lt;iostream&gt; using namespace std; template&lt;int N, int M&gt; struct commondivs { static const int val = (N&lt;M) ? commondivs&lt;N,(M-N)&gt;::val : commondivs&lt;(N-M),M&gt;::val; }; template&lt;int N&gt; struct commondivs&lt;N,N&gt; { static const …

2
Ein Konzept an eine Funktion übergeben
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 …


1
Schlechter Typabzug beim Übergeben eines überladenen Funktionszeigers und seiner Argumente
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 &lt;functional&gt; template &lt;typename ReturnType, …

7
Ist es möglich, rekursiv ganzzahlige Vorlagenparameter in C ++ abzugleichen?
Ich habe folgendes Problem. Ich definiere einen N-dimensionalen Vektor als solchen #include &lt;vector&gt; #include &lt;utility&gt; #include &lt;string&gt; template &lt;int N, typename T&gt; struct NVector{ typedef std::vector&lt;typename NVector&lt;N-1,T&gt;::type&gt; type; }; template &lt;typename T&gt; struct NVector&lt;1,T&gt; { typedef std::vector&lt;T&gt; type; }; Ich möchte eine Funktion Map höherer Ordnung schreiben , die die …


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.