<?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[Wie generische Meta Data?]]></title><description><![CDATA[<p>Abend,</p>
<p>ich brauche für eine Klasse generische User Data, sprich man soll an die Klasse irgend ein Objekt dranhängen können.</p>
<p>z.B. so:</p>
<pre><code class="language-cpp">Object* o1 = new Object;
o1-&gt;setUserData( new int(3) ); // User Data = simpler int

struct Foo {
   string s;
   double d;
};

Object* o2 = new Object;
o2-&gt;setUserData( new Foo(&quot;Hi&quot;, 22) ); // Diesmal ist User Data ein Foo Objekt
</code></pre>
<p>Ich will NICHT Foo zu einem Template machen! Wie könnte man das machen?<br />
Ich dachte erst, dass ich Object einen shared_ptr&lt;??&gt; hinzufüge, aber welchen Typ sollte ich dann dem shared_ptr geben? void* geht ja nicht, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/299210/wie-generische-meta-data</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 10:48:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/299210.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 05 Feb 2012 18:14:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie generische Meta Data? on Sun, 05 Feb 2012 18:14:23 GMT]]></title><description><![CDATA[<p>Abend,</p>
<p>ich brauche für eine Klasse generische User Data, sprich man soll an die Klasse irgend ein Objekt dranhängen können.</p>
<p>z.B. so:</p>
<pre><code class="language-cpp">Object* o1 = new Object;
o1-&gt;setUserData( new int(3) ); // User Data = simpler int

struct Foo {
   string s;
   double d;
};

Object* o2 = new Object;
o2-&gt;setUserData( new Foo(&quot;Hi&quot;, 22) ); // Diesmal ist User Data ein Foo Objekt
</code></pre>
<p>Ich will NICHT Foo zu einem Template machen! Wie könnte man das machen?<br />
Ich dachte erst, dass ich Object einen shared_ptr&lt;??&gt; hinzufüge, aber welchen Typ sollte ich dann dem shared_ptr geben? void* geht ja nicht, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2177312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2177312</guid><dc:creator><![CDATA[C++C]]></dc:creator><pubDate>Sun, 05 Feb 2012 18:14:23 GMT</pubDate></item><item><title><![CDATA[Reply to Wie generische Meta Data? on Sun, 05 Feb 2012 18:20:39 GMT]]></title><description><![CDATA[<p>C++C schrieb:</p>
<blockquote>
<p>ich brauche für eine Klasse generische User Data</p>
</blockquote>
<p>Gib jeder Klasse eine ID und nimm die als Index für eine std::map&lt;int, user_data_type&gt;.</p>
<blockquote>
<p>Ich dachte erst, dass ich Object einen shared_ptr&lt;??&gt; hinzufüge, aber welchen Typ sollte ich dann dem shared_ptr geben?</p>
</blockquote>
<p>Wenn du unbedingt einen shared_ptr in Verbindung mit Type erasure willst, kannst du shared_ptr&lt;<a href="http://www.boost.org/doc/html/any.html" rel="nofollow">boost:.any</a>&gt; nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2177315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2177315</guid><dc:creator><![CDATA[metauser]]></dc:creator><pubDate>Sun, 05 Feb 2012 18:20:39 GMT</pubDate></item><item><title><![CDATA[Reply to Wie generische Meta Data? on Sun, 05 Feb 2012 18:29:04 GMT]]></title><description><![CDATA[<p>Er kann auch gleich boost::any verwenden.<br />
Ich habe mir die Implementation zwar nicht angeschaut,<br />
aber ich würde eine any-Klasse intern auch durch einen Zeiger realisieren:</p>
<pre><code class="language-cpp">class any
{
    class basic_holder;

    template &lt;typename T&gt;
    class holder
    {
    };

    basic_holder * data_;

public:
    // Beispiel operator =
    template &lt;typename T&gt;
    any &amp; operator = (T const &amp; val)
    {
        delete data_;
        data_ = new holder&lt;T&gt;(val);
        return *this;
    }
};
</code></pre>
<p>Für den Fall, dass er kein boost nutzen möchte, wäre das ein Ansatz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2177320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2177320</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Sun, 05 Feb 2012 18:29:04 GMT</pubDate></item></channel></rss>