<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[System-Details hinter void* verstecken?]]></title><description><![CDATA[<p>Hoi! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Ich würde gerne in meiner Library Systemdetails weiter verstecken, was vor allem Portabilität ermöglichen soll. Vor allem Systemheader will ich mit Gewalt aus den Header Files fernhalten und möglichst keine Präprozessorswitches im Interface haben.<br />
So habe ich mir ein Grundinterface zusammengebastelt, das jedes Betriebssystem implementieren könnte:</p>
<pre><code class="language-cpp">namespace Detail
  {
    class MemoryRegionSnapshot
    {
    private:
      int m_pid;
      void* m_impl;

    public:
      MemoryRegionSnapshot(Pid procId);
      MemoryRegionSnapshot(MemoryRegionSnapshot const&amp; other);
      MemoryRegionSnapshot(MemoryRegionSnapshot&amp;&amp; other);
      ~MemoryRegionSnapshot();

      MemoryRegionSnapshot&amp; operator=(MemoryRegionSnapshot const&amp; other);
      MemoryRegionSnapshot&amp; operator=(MemoryRegionSnapshot&amp;&amp; other);

      MemoryRegion extractNextRegion();
      bool hasMoreRegions() const;
    };
  }
</code></pre>
<p>Jetzt frage ich mich halt, ob das mit dem void* nicht recht schlechter C++ Stil wäre, mir geht es in der Library eben auch stark um gutes Design.</p>
<p>Hinter dem void* würde sich in diesem spezifischem Fall unter Windows ein &quot;echter&quot; void-Pointer verbergen (von daher würde auch keine Typinformation verloren gehen, unter Linux wäre es ein FILE*/std::ifstream*, andere Systeme hab ich mir bis jetzt noch nicht angesehen.</p>
<p>Guter/Schlechter Stil? Vorschläge es schöner zu machen?</p>
<p>Danke! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Grüße,<br />
Ethon</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/291556/system-details-hinter-void-verstecken</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 15:53:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291556.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 21 Aug 2011 18:12:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to System-Details hinter void* verstecken? on Sun, 21 Aug 2011 18:12:01 GMT]]></title><description><![CDATA[<p>Hoi! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Ich würde gerne in meiner Library Systemdetails weiter verstecken, was vor allem Portabilität ermöglichen soll. Vor allem Systemheader will ich mit Gewalt aus den Header Files fernhalten und möglichst keine Präprozessorswitches im Interface haben.<br />
So habe ich mir ein Grundinterface zusammengebastelt, das jedes Betriebssystem implementieren könnte:</p>
<pre><code class="language-cpp">namespace Detail
  {
    class MemoryRegionSnapshot
    {
    private:
      int m_pid;
      void* m_impl;

    public:
      MemoryRegionSnapshot(Pid procId);
      MemoryRegionSnapshot(MemoryRegionSnapshot const&amp; other);
      MemoryRegionSnapshot(MemoryRegionSnapshot&amp;&amp; other);
      ~MemoryRegionSnapshot();

      MemoryRegionSnapshot&amp; operator=(MemoryRegionSnapshot const&amp; other);
      MemoryRegionSnapshot&amp; operator=(MemoryRegionSnapshot&amp;&amp; other);

      MemoryRegion extractNextRegion();
      bool hasMoreRegions() const;
    };
  }
</code></pre>
<p>Jetzt frage ich mich halt, ob das mit dem void* nicht recht schlechter C++ Stil wäre, mir geht es in der Library eben auch stark um gutes Design.</p>
<p>Hinter dem void* würde sich in diesem spezifischem Fall unter Windows ein &quot;echter&quot; void-Pointer verbergen (von daher würde auch keine Typinformation verloren gehen, unter Linux wäre es ein FILE*/std::ifstream*, andere Systeme hab ich mir bis jetzt noch nicht angesehen.</p>
<p>Guter/Schlechter Stil? Vorschläge es schöner zu machen?</p>
<p>Danke! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Grüße,<br />
Ethon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2108840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2108840</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sun, 21 Aug 2011 18:12:01 GMT</pubDate></item><item><title><![CDATA[Reply to System-Details hinter void* verstecken? on Sun, 21 Aug 2011 18:16:39 GMT]]></title><description><![CDATA[<p>Ich glauube, du suchst das Pimpl-Idiom:<br />
<a href="https://www.google.de/search?&amp;q=pimpl%20idiom%20c%2B%2B" rel="nofollow">Google: pimpl idiom c++</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2108842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2108842</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 21 Aug 2011 18:16:39 GMT</pubDate></item><item><title><![CDATA[Reply to System-Details hinter void* verstecken? on Sun, 21 Aug 2011 18:50:06 GMT]]></title><description><![CDATA[<p>und selbst damit könntest du es per template machen, also sprich dir das void bzw. den fstream als templte parameter übergeben lassen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2108852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2108852</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sun, 21 Aug 2011 18:50:06 GMT</pubDate></item><item><title><![CDATA[Reply to System-Details hinter void* verstecken? on Sun, 21 Aug 2011 19:39:53 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>und selbst damit könntest du es per template machen, also sprich dir das void bzw. den fstream als templte parameter übergeben lassen</p>
</blockquote>
<p>Aber gerade dann müsste ich doch die Implementierung offen legen und sämtliche Systemheader inkludieren + den Code mit Präprozessoranweisungemn verwursten.</p>
<blockquote>
<p>Ich glauube, du suchst das Pimpl-Idiom:<br />
Google: pimpl idiom c++</p>
</blockquote>
<p>Klingt brauchbar! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich versuche zwar krampfhaft zu vermeiden, dynamisch Speicher zu allozieren, aber ich denke dass 1 new/delete nicht ins Gewicht fällt wenn mit jeder Instanz im Extremfall über 1000 Zeilen Text komplett geparsed werden müssen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2108859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2108859</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sun, 21 Aug 2011 19:39:53 GMT</pubDate></item><item><title><![CDATA[Reply to System-Details hinter void* verstecken? on Sun, 21 Aug 2011 19:46:47 GMT]]></title><description><![CDATA[<p>Warum <code>void*</code> und nicht eine konventionelle polymorphe Basisklasse? Mit virtuellen Funktionen müsstest du auch nicht andauernd casten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2108862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2108862</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 21 Aug 2011 19:46:47 GMT</pubDate></item></channel></rss>