Als «templates» getaggte Fragen

Das Templates-Tag wird in mehreren Kontexten verwendet: generische Programmierung (insbesondere C ++) und Daten- / Dokumentgenerierung mithilfe von Template-Engines. Wenn Sie dieses Tag für umfangreiche Fragen zur Implementierung verwenden, markieren Sie die Codesprache, in der die Implementierung geschrieben ist.

4
Wie rufe ich den richtigen Konstruktor eines Vorlagentyps auf?
Wie kann ich im folgenden Code dafür sorgen, dass die kommentierte Zeile genauso funktioniert wie die Zeile direkt darüber? Ich möchte daraus einen generischen Code machen, der einen geeigneten Konstruktor einer Vorlage aufruft Type. #include <string> #include <iostream> template <typename Type> struct Class { Type data; Class(Type data) : data(data) …




1
Ist Clang korrekt, um Code abzulehnen, in dem die verschachtelte Klasse einer Klassenvorlage nur über Spezialisierungen definiert ist?
Gegeben die folgende Klassenvorlage: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; Wir definieren Innerseparat für jede Spezialisierung von Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; und definieren Sie dann die Elementfunktion feinmal für alle Spezialisierungen von Outer: auto Outer<T>::f(Inner) -> void { } …

2
Mehrdeutige Überlastungsvorlagen
Ich habe den folgenden Vorlagencode #include <vector> #include <array> #include <iostream> template<typename T1> void foo(std::vector<T1> bar) { std::cout << "GENERIC" << std::endl; } template<typename T1> void foo(std::vector<std::vector<T1>> bar) { std::cout << "SPECIFIC (vector)" << std::endl; } template<typename T1, int SIZE> void foo(std::vector<std::array<T1, SIZE>> bar) { std::cout << "SPECIFIC (array)" << …
16 c++  templates 

2
So übergeben Sie einen Verweis auf ein Template-Typnamen-Argument
Gibt es eine Möglichkeit, eine Referenz als Argument an ein Argument für den Vorlagentypnamen zu übergeben? Ich meine dies, anstatt beispielsweise ein int zu übergeben, um einen Verweis auf ein int zu übergeben. template <typename T> struct Foo { Foo(T arg) : ptr(arg) {} T ptr; }; int main() { …
16 c++  templates 

3
Variadische Vorlagen: Entfalten Sie Argumente in Gruppen
Ich habe eine Funktion, die zwei Argumente akzeptiert: template <typename T1, typename T2> void foo(T1 arg1, T2 arg2) { std::cout << arg1 << " + " << arg2 << '\n'; } Und eine Variante, die ihre Argumente paarweise weiterleiten sollte: template <typename... Args> void bar(Args&&... args) { static_assert(sizeof...(Args) % 2 …


1
Clang kompiliert keinen Code, aber gcc und msvc haben ihn kompiliert
Ich verstehe nicht, was das Problem ist: entweder in meinem Code oder im Compiler (weniger möglich). Es gibt einen Code wie diesen: #include <iostream> #include <type_traits> #include <set> template<typename T, typename = void> struct TestA: std::false_type {}; template<typename T> struct TestA<T, std::void_t<typename T::reverse_iterator>> : std::true_type {}; template<typename T> struct TestA<T, …



1
C ++ - Compilerproblem mit struct in der Vorlagenklasse
Der folgende Code wird nicht mit gcc oder clang kompiliert. template<class T> class foo{}; template<class T> class template_class_with_struct { void my_method() { if(this->b.foo < 1); }; struct bar { long foo; } b; }; Fehlermeldung ist error: type/value mismatch at argument 1 in template parameter list for 'template<class T> class …

3
Führen Sie die Funktion innerhalb der Funktionsvorlage nur für die Typen aus, für die die Funktion definiert ist
Ich habe eine Funktionsvorlage, die viele verschiedene Typen als Eingabe verwendet. Von diesen Typen hat nur einer eine getInt()Funktion. Daher möchte ich, dass der Code die Funktion nur für diesen Typ ausführt. Bitte schlagen Sie eine Lösung vor. Vielen Dank #include <type_traits> #include <typeinfo> class X { public: int getInt(){ …

6
Wie vergleiche ich generische Strukturen in C ++?
Ich möchte Strukturen generisch vergleichen und habe so etwas getan (ich kann die tatsächliche Quelle nicht teilen, bitte fragen Sie bei Bedarf nach weiteren Details): template<typename Data> bool structCmp(Data data1, Data data2) { void* dataStart1 = (std::uint8_t*)&data1; void* dataStart2 = (std::uint8_t*)&data2; return memcmp(dataStart1, dataStart2, sizeof(Data)) == 0; } Dies funktioniert …

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.