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
      378
      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  

      6
      0
      Stimmen
      6
      Beiträge
      140
      Aufrufe

      L

      @DocShoe sagte in SQL: Funktion in Funktion: Performance grausig: @Lupus-SLE Wie ist die Laufzeit jetzt? Linear. Edit: Bzw., für d Tage mit insgesamt n Einträgen: n*n.
    • W

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

      4
      0
      Stimmen
      4
      Beiträge
      95
      Aufrufe

      @DocShoe hat dir doch schon das Problem dargestellt, also daß standardmäßig JsonSerializer.Serialize nur Eigenschaften (properties) serialisiert und nicht normale Member (fields). Also die Internet-Suche ergibt dann z.B. JSON-Serialisierung: Einschließen von Feldern. Wenn du die Struktur nicht ändern kannst (S7Client hört sich nach der Siemens-Library an), dann probiere var options = new JsonSerializerOptions { IncludeFields = true }; string jsonString = JsonSerializer.Serialize(CpInfo, options);
    • L

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

      3
      0
      Stimmen
      3
      Beiträge
      44
      Aufrufe

      L

      Emulator vor dem OS Man kann zwischen OS und Terminal einen Emulator erstellen, dieser benutzt Prozesse, Module, Funktionen, Parametersyntax, Prozeduren, Main's, Herleitung und Verteilungsparameter, Praktiken, Makros, Sicherheitszertifikate und aus diesen Praktiken soetwas wie ROM Ausführung... Diese ROM's haben Prozesse, Systeme, Syntaxen, Multitasking, strukturierte Aligorithmen. Ähnlich wie eine Skriptsprache die auf dem Terminal/der Konsole als System geöffnet wird... Ähnlich halten wie Assembler, Maschinensprache und C++.
    • L

      Boot-loader, Kernel, Konsole, Emulator, OS
      Projekte • • lukluk  

      2
      0
      Stimmen
      2
      Beiträge
      180
      Aufrufe

      L

      Mich hast du überzeugt.