Articles of c ++ 11

Wie konvertiert man ein Lambda zu einer std :: -function mit Vorlagen

Im Grunde genommen möchte ich ein Lambda mit einer beliebigen Anzahl von Parametern erzeugen und in eine std :: -function umwandeln. Ich habe folgendes versucht und keine der Methoden funktioniert. std::function([](){});//Complains that std::function is missing template parameters template void foo(function f){} foo([](){});//Complains that it cannot find a matching candidate Der folgende Code funktioniert jedoch, aber […]

Confly-Time-Zeichenfolgen in C ++ bequem deklarieren

In der Lage zu sein, Strings während der Kompilierung in C ++ zu erstellen und zu bearbeiten, hat mehrere nützliche Anwendungen. Obwohl es in C ++ möglich ist, Zeichenfolgen zur Kompilierzeit zu erstellen, ist der process sehr umständlich, da die Zeichenfolge als eine variadische Zeichensequenz deklariert werden muss, z using str = sequence; Operationen wie […]

Wie rufe ich :: std :: make_shared für eine class mit nur geschützten oder privaten Konstruktoren auf?

Ich habe diesen Code, der nicht funktioniert, aber ich denke, die Absicht ist klar: testmakeshared.cpp #include class A { public: static ::std::shared_ptr create() { return ::std::make_shared(); } protected: A() {} A(const A &) = delete; const A &operator =(const A &) = delete; }; ::std::shared_ptr foo() { return A::create(); } Aber ich bekomme diesen Fehler, […]

Verwenden von externem Template (C ++ 11)

Abbildung 1: functionsvorlagen TemplHeader.h template void f(); TemplCpp.cpp template void f(){ //… } //explicit instantation template void f(); Haupt.cpp #include “TemplHeader.h” extern template void f(); //is this correct? int main() { f(); return 0; } Ist dies der richtige Weg, um extern template , oder verwende ich dieses Schlüsselwort nur für classnvorlagen wie in Abbildung […]

Verschieben Sie die Aufnahme in Lambda

Wie erfasse ich in einem C ++ 11-Lambda durch Verschieben (auch bekannt als R-Wert-Referenz)? Ich versuche so etwas zu schreiben: std::unique_ptr myPointer(new int); std::function = [std::move(myPointer)]{ (*myPointer) = 4; };

C ++ 11 führte ein standardisiertes Speichermodell ein. Was heißt das? Und wie wird es die C ++ Programmierung beeinflussen?

C ++ 11 führte ein standardisiertes Speichermodell ein, aber was genau bedeutet das? Und wie wird es die C ++ Programmierung beeinflussen? Dieser Artikel (von Gavin Clarke, der Herb Sutter zitiert) sagt, dass Das Speichermodell bedeutet, dass C ++ – Code jetzt eine standardisierte Bibliothek zum Aufrufen hat, unabhängig davon, wer den Compiler erstellt hat […]

Warum kompiliert dieses C ++ – Snippet (die nicht-void-function gibt keinen Wert zurück)

Das habe ich heute morgen in einer meiner Bibliotheken gefunden: static tvec4 Min(const tvec4& a, const tvec4& b, tvec4& out) { tvec3::Min(a,b,out); out.w = min(aw,bw); } Ich würde einen Compiler-Fehler erwarten, da diese Methode nichts zurückgibt und der Rückgabetyp nicht void . Die einzigen zwei Dinge, die in den Sinn kommen, sind An der einzigen […]

Vergleichsoperatoren über ‘Tupel’ und ‘tie’ implementieren, eine gute Idee?

(Hinweis: tuple und tie können von Boost oder C ++ 11 übernommen werden.) Wenn ich kleine Strukturen mit nur zwei Elementen schreibe, tendiere ich manchmal dazu, ein std::pair -Paar auszuwählen, da alle wichtigen Dinge bereits für diesen Datentyp erledigt sind, wie der operator< für Strict-Weak-Ordering. Die Nachteile sind jedoch die ziemlich nutzlosen Variablennamen. Auch wenn […]

Warum haben konstante Ausdrücke einen Ausschluss für undefiniertes Verhalten?

Ich habe untersucht, was in einem konstanten coreausdruck * erlaubt ist, was in Abschnitt 5.19 , Abschnitt 2 des Entwurfs des C ++ – Standards mit konstanten Ausdrücken beschrieben wird , der besagt: Ein Bedingungsausdruck ist ein corekonstantenausdruck, es sei denn, er enthält einen der folgenden als potenziell ausgewerteten Unterausdruck (3.2), aber Teilausdrücke von logischen […]

Sortierung gezippter (gesperrter) Container in C ++ mit Boost oder der STL

Was ich machen möchte: Ich möchte 2 oder 3 oder N Vektoren zusammenschließen, ohne sie in ein Tupel zu kopieren . Das heißt, die Ausführlichkeit beiseite lassen, etwas wie: vector v1 = { 1, 2, 3, 4, 5}; vector v2 = { 11, 22, 33, 44, 55}; vector v3 = {111, 222, 333, 444, 555}; […]