Navigation

    cpp-logo

    C++ Community

    • Registrieren
    • Anmelden
    • Suche
    • Kategorien
    • Aktuell
    • Tags
    • Beliebt
    • Gruppen
    1. Übersicht
    2. Beliebt
    Melde dich an, um einen Beitrag zu erstellen
    • Alle Kategorien
    • Ankündigungen
    •      Die Artikel
    • C++ (alle ISO-Standards)
    •      MFC
    •      VCL (C++ Builder)
    •      C++/CLI mit .NET
    •      Andere GUIs - Qt, GTK+, wxWidgets
    • Sonstige Programmiersprachen
    •      C (alle ISO-Standards)
    •      C# und .NET
    •      Java
    •      Assembler
    •      Webzeugs
    • Betriebssysteme
    •      WinAPI
    •      Linux/Unix
    •      Projekt: OS-Development
    •      DOS und Win32-Konsole (nur Lesen)
    • Weitere Fachbereiche
    •      Mathematik und Physik
    •      Spiele-/Grafikprogrammierung
    •      Datenbanken
    •      Compiler- und IDE-Forum
    •      Projekte
    • Jenseits der Programmierung
    •      Beruf und Ausbildung
    •      Stellenangebote
    •      Themen rund um die IT
    •      Gaming-Corner
    • Forentechnik
    • Archiv
    •      Das C++ Magazin
    •          Die Redaktion
    •          Die Autoren
    •          Allgemeines zum Magazin
    •          Archiv
    •      Organisation des Forumtreffens
    •      FAQs - Frequently Asked Questions
    •          FAQ - C (C89, C99 und C11)
    •          FAQ - Assembler
    •          FAQ - C++ (auch C++0x, C++11)
    •          FAQ - C++/CLI
    •          FAQ - C++ Builder (VCL/CLX)
    •          FAQ - C# und .NET
    •          FAQ - Compiler & IDEs
    •          FAQ - Datenbanken
    •          FAQ - DOS und Win32-Konsole
    •          FAQ - Grafik-/Spieleprogrammierung
    •          FAQ - GUIs
    •          FAQ - Java
    •          FAQ - Linux/Unix
    •          FAQ - Mathematik und Physik
    •          FAQ - MFC
    •          FAQ - Rund um die Programmierung
    •          FAQ - Sonstiges
    •          FAQ - Webzeugs
    •          FAQ - WinAPI
    •          FAQ - Forentechnik
    • Alle Themen
    • Neue Themen
    • Beobachtete Themen
    • Unbeantwortete Themen
    • Gesamter Zeitraum
    • Tag
    • Woche
    • Monat

    • Parameterpack verändern
      C++ (alle ISO-Standards) • • DocShoe  

      11
      0
      Stimmen
      11
      Beiträge
      399
      Aufrufe

      F

      @DNKpp sagte in Parameterpack verändern: @Finnegan sagte in Parameterpack verändern: Ich denke du hast da noch einen Fehler drin: template<typename T> replacement_forward_type_t<T> replace_forward( T& param ) sollte stattessen: template<typename T> replacement_forward_type_t<T> replace_forward( T&& param ) Das stimmt so nicht ganz. Da er keine automatische deduction nutzt, sondern den Typen selbst angibt, erhält er in ersterem Fall garantiert immer eine lvalue-ref. Jedoch übergibt er param in den gezeigten Fällen auch immer nur als lvalue-ref. Würde initial an execute eine rvalue-ref übergeben werden, würde es durch die manuelle Angabe von T mit deiner vorgeschlagenen Variante nicht compilen, da param dann entsprechend eine rvalue-ref erwarten würde. => https://godbolt.org/z/x31cv3KjP Oh ja, das stimmt! Das ist ja eine forward-Implementation, die die Typangabe im Template-Argument erwartet. Da bin ich auch echt einiger Verwirrung zum Opfer gefallen indem ich von Deduktion ausgegangen bin Ich war auf replacement_forward_type_t<T> fixiert, das meines Erachtens immer ein Alias für T&& ist, wenn es sich nicht um einen String handelt. Das kann auch nicht richtig sein, oder? Die Idee ist doch, nur selektiv eine RValue-Referenz zurückzugeben, und zwar dann, wenn auch das "Original" eine ist. Sonst kommt z.B. eine Funktion, der ich eine Variable via replace_forward übergebe auf die Idee, aus der Variable zu "moven" (?). EDIT: Ich weiß nicht ob ich dich richtig verstehe aber deine Erklärung scheint mir hier auch nicht ganz richtig zu sein: Erstmal Deduktion versuchen und den Unterschied zwischen Deduktion via auto und delctype(auto) kennen. Letzteres ist oft hilfreich, wenn man deduzieren und dabei die Referenz erhalten will. auto-Deduktion liefert dir nämlich immer den reinen Typ ohne die Referenz. Es ist zwar korrekt, dass auto immer eine value daduced, aber decltype(auto) deduced nicht garantiert eine Referenz, sondern kann auch eine Value sein! Möchtest du eine Referenz haben, dann sollte man auch zu auto&& greifen. Allerdings ist das für den hier gezeigten Anwendungsfall wohl genau das was er haben will: Referenz oder Value. Ich meinte damit nicht, dass immer eine Referenz deduziert wird, sondern dass diese erhalten bleibt, wenn das Original bereits eine ist. Was ist denn, wenn wir bei meinem Vorschlag anders herum gehen und eben nicht sagen, dass es eine "forward"-Implementation ist, sondern eine deduzierende Ersetzungs-Funktion? Das ist das, worauf in intuitiv eigentlich hinaus wollte. Damit, ein "forward" zu bauen war ich eh nicht so besonders glücklich (habe mich da an vorherigen Lösungen orientiert): template<typename T> auto replace( T&& param ) -> decltype(auto) { if constexpr( is_string_ref_v<T> ) { return std::string( "Replaced" ); } else if constexpr( is_char_array_ref_v<T> ) { return std::string( "Replaced" ); } else if constexpr( is_char_pointer_ref_v<T> ) { return std::string( "Replaced" ); } else { return std::forward<T>( param ); } } Das verwendet man dann so (aus dem ersten Post): template<typename ...Params> void execute(std::string const& name, Params&&... params) { impl()->execute(name, replace(std::forward<Params>(params))...); } Sollte das nicht funktionieren? std::forward übergibt Parameter in der Value Category die an execute übergeben wurde, replace ersetzt Strings und gibt dann eine RValue-Referenz auf std::string-Objekte zurück und "reflektiert" ansonsten den Parameter in derselben Value Category?
    • L

      SQL: Funktion in Funktion: Performance grausig
      Datenbanken • • Lupus-SLE  

      7
      0
      Stimmen
      7
      Beiträge
      189
      Aufrufe

      L

      *püschel* Mein Bauchgefühl sagt mir, es könnte auch ohne die cursor_list und list loop gehen... Aber zu 100 % sicher bin ich mir da nicht. Könntet ihr bitte noch einmal einen Blick darauf werfen? Btw., gibt es vernünftige/brauchbare SQL source formatter? Dieser ständige Wechsel zwischen UPPER- und lower_case und die Einrückungstiefe macht mich langsam mürbe.
    • W

      Datenbereich (Pointer) => json
      C# und .NET • • worst_case  

      5
      0
      Stimmen
      5
      Beiträge
      142
      Aufrufe

      W

      Hallo, vielen Dank, das war es. @DocShoe : Sorry ... das mit der "Reflection nur Properties" hatte ich anders verstanden. Leider habe ich dadurch ein 2.Problem gesehen. Mein json String sieht nachfolgend aus { "ModuleTypeName" : "CPU 314C-2 PN/DP\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", "SerialNumber" : "S Q-E3U024642014\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", "ASName" : "192.168.10.11_MPI-11\u0000\u0000\u0000\u0000", "Copyright" : "Original Siemens Equipment", "ModuleName" : "CPU 314C-2 PN/DP\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" } Dachte ich mir, kein Problem ... var options = new JsonSerializerOptions { IncludeFields = true, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, WriteIndented = true // Optional: für bessere Lesbarkeit }; Interresiert Ihm aber nicht, der json String wird nicht verändert. Wie kann ich den unicode entfernen, ideal wäre direkt beim serialsieren. Ein nachträgliches jsonString.Replace ("\0", string.Empty); bringt auch nichts. Vielen Dank !!!
    • L

      Neue Programmier Ansicht.
      C++ (alle ISO-Standards) • • lukluk  

      4
      0
      Stimmen
      4
      Beiträge
      88
      Aufrufe

      E

      @lukluk sagte in Neue Programmier Ansicht.: Was haltet ihr davon, bin gerade am tüfteln für eine neue Programmiersprache. Es gibt bereits genügend.