<?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[Pointer auf unbekannten Typen.]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Programm was eine Varialbe unbekannten Typs übergeben bekommen soll. Diese soll dann in einem Klassentemplate weiterverarbeitet werden.</p>
<p>Wie kann ich das realisieren?</p>
<p>Im Grunde müsste ich sowas wie:</p>
<pre><code>template &lt;typename T&gt;
const T* pointer;

...

template &lt;class T&gt;
class ClassTemp{
public: do(&lt;T&gt; Zeiger);

...

ClassTemp&lt;pointer-&gt;gettype()&gt; Instanz;
Instzanz.do(&amp;pointer)
</code></pre>
<p>Ist es überhaupt möglich einen Zeiger auf einen unbekannten Typ zu erstellen?</p>
<p>Viele Danke für alle Antworten,</p>
<p>Moritz</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/196183/pointer-auf-unbekannten-typen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 04 Oct 2026 19:18:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/196183.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 26 Oct 2007 13:16:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer auf unbekannten Typen. on Fri, 26 Oct 2007 13:16:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Programm was eine Varialbe unbekannten Typs übergeben bekommen soll. Diese soll dann in einem Klassentemplate weiterverarbeitet werden.</p>
<p>Wie kann ich das realisieren?</p>
<p>Im Grunde müsste ich sowas wie:</p>
<pre><code>template &lt;typename T&gt;
const T* pointer;

...

template &lt;class T&gt;
class ClassTemp{
public: do(&lt;T&gt; Zeiger);

...

ClassTemp&lt;pointer-&gt;gettype()&gt; Instanz;
Instzanz.do(&amp;pointer)
</code></pre>
<p>Ist es überhaupt möglich einen Zeiger auf einen unbekannten Typ zu erstellen?</p>
<p>Viele Danke für alle Antworten,</p>
<p>Moritz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1392517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392517</guid><dc:creator><![CDATA[Moritz06]]></dc:creator><pubDate>Fri, 26 Oct 2007 13:16:40 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf unbekannten Typen. on Mon, 29 Oct 2007 09:07:38 GMT]]></title><description><![CDATA[<p>Einmal Richtung C++ verschieben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393969</guid><dc:creator><![CDATA[Dappeljuh]]></dc:creator><pubDate>Mon, 29 Oct 2007 09:07:38 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf unbekannten Typen. on Mon, 29 Oct 2007 09:46:11 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-18363.html" rel="nofollow">Jochen Kalmbach</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-58.html" rel="nofollow">C++/CLI mit .NET</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393984</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Mon, 29 Oct 2007 09:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf unbekannten Typen. on Mon, 29 Oct 2007 10:34:58 GMT]]></title><description><![CDATA[<p>Templates werden bereits zur Compilezeit instanziiert - auf deutsch: die Parameter durch einen vorgegebenen Typ ersetzt. Da kannst du nicht zur Laufzeit den Typ ändern, auf den der Zeiger verweist.<br />
(überhaupt ist es nur eingeschränkt möglich, den Typ einer Variable zur Laufzeit zu unterscheiden)</p>
<p>Also: Was genau hast du eigentlich vor?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394015</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 29 Oct 2007 10:34:58 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf unbekannten Typen. on Mon, 29 Oct 2007 10:39:25 GMT]]></title><description><![CDATA[<p>Du könntest das ganze als void Pointer durchreichen, und wenn du an den Verarbeitungspunkt kommst, per RTTI &amp; dynamic_cast den Typ zuweisen. Mit RTTI meine ich jetzt die Nutzung vom Operator typeid().</p>
<p>Kleines Beispiel:</p>
<pre><code class="language-cpp">#include &lt;typeinfo&gt;

class A
{
  // bla
};

class B
{
  // blub
};

void irgendein_verarbeitungspunkt(void* a_param)
{
  if(typeid(a_param) == typeid(A))
  {
    A* l_classA = dynamic_cast&lt;A*&gt;(a_param);
    if(l_classA != NULL)
    {
      // do something
    }
  } else if(typeid(a_param) == typeid(B))
  {
    B* l_classB = dynamic_cast&lt;B*&gt;(a_param);
    if(l_classB != NULL)
    {
      // do something else
    }
  } else
  {
    // Fehlerbehandlung
  }
}
</code></pre>
<p>Aber <strong>Vorsicht</strong>, ich hab das nicht ausprobiert. Sollte aber klappen. Bitte verbessert mich falls nicht.</p>
<p>Die schönste Methode ist das allerdings nicht. Wäre besser das zu verhindern...</p>
<p>Edit:<br />
Wenn ich jetzt so CStolls Beitrag lesen, glaub ich hab Moritz06 missverstanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394016</guid><dc:creator><![CDATA[Tobias W]]></dc:creator><pubDate>Mon, 29 Oct 2007 10:39:25 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf unbekannten Typen. on Mon, 29 Oct 2007 11:24:29 GMT]]></title><description><![CDATA[<p>Moritz06 schrieb:</p>
<blockquote>
<p>...<br />
Ist es überhaupt möglich einen Zeiger auf einen unbekannten Typ zu erstellen?<br />
...</p>
</blockquote>
<p>Klar !<br />
Aber die Frage ist: Was willst Du damit machen ?<br />
und damit die Frage: Ab wann (und wodurch) soll aus dem &quot;unbekannten&quot; ein &quot;bekannter&quot; Typ werden ? (denn nur mit denen würde ich arbeiten)</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394043</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 29 Oct 2007 11:24:29 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf unbekannten Typen. on Thu, 01 Nov 2007 18:30:13 GMT]]></title><description><![CDATA[<p>Danke für die Antworten,<br />
der void* pointer konnte mein Problem lösen.<br />
Trivial eigentlich, hätte ich wirklich mal drauf kommen können.<br />
Danke für eure Hilfe und das Beispiel und sorry, dass ich wohl im falschen Forum gepostet habe.</p>
<p>Moritz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1396041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1396041</guid><dc:creator><![CDATA[Moritz06]]></dc:creator><pubDate>Thu, 01 Nov 2007 18:30:13 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf unbekannten Typen. on Fri, 02 Nov 2007 08:34:58 GMT]]></title><description><![CDATA[<p>ein void pointer lässt sich glaube nicht mehr anstandslos kompillieren, warum noimmst du keine new template&lt;class T&gt; wenn du was zur laufzeit erzeugen willst....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1396232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1396232</guid><dc:creator><![CDATA[dgrat]]></dc:creator><pubDate>Fri, 02 Nov 2007 08:34:58 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf unbekannten Typen. on Fri, 02 Nov 2007 08:38:41 GMT]]></title><description><![CDATA[<p>dgrat schrieb:</p>
<blockquote>
<p>ein void pointer lässt sich glaube nicht mehr anstandslos kompillieren,</p>
</blockquote>
<p>Warum nicht - du mußt ihn nur vor Verwendung in etwas sinnvolles umcasten.</p>
<blockquote>
<p>warum noimmst du keine new template&lt;class T&gt; wenn du was zur laufzeit erzeugen willst....</p>
</blockquote>
<p>Templates werden bereits zur Compilezeit instanziiert - etwas zu früh für diese Zwecke <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/1396237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1396237</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 02 Nov 2007 08:38:41 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf unbekannten Typen. on Fri, 02 Nov 2007 08:59:54 GMT]]></title><description><![CDATA[<p>Tobias W schrieb:</p>
<blockquote>
<p>Bitte verbessert mich falls nicht.</p>
</blockquote>
<p>Nö, kann nicht klappen, da weder typeid noch dynamic_cast mit void* funktionieren. Für beide brauchst du als Ausgangspunkt einen Zeiger auf eine &quot;polymorphe&quot; Klasse, also eine mit mindestens einer virtuellen Funktion.<br />
Wenn man allerdings irgendwie anders wissen kann was der Typ des Objektes ist funktioniert es mit typeid sehrwohl.</p>
<p>Noch ein Fehler in deinem Code: Angenommen a_param ist ein Zeiger aauf T, dann ist typeid(a_param) gleich typeid(T*) und nicht typeid(T) bzw. typeid(derived_from_T). Um auf typeid(derived_from_T) zu kommen müsstest du typeid(*a_param) schreiben.</p>
<p>Und natürlich ... wenn du schon einen T* hast und weisst dass er in wirklichkeit auf ein A zeigt, dann kannst du einfach einen static_cast nehmen - dynamic_cast ist da nicht notwändig (Ausnahme: virtuelle Vererbung ist im Spiel).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1396246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1396246</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 02 Nov 2007 08:59:54 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf unbekannten Typen. on Sat, 03 Nov 2007 15:26:39 GMT]]></title><description><![CDATA[<p>Stimmt, der Code würde so nicht klappen. Aber ist auf jeden Fall ein Hinweis wie man an die Sache rangehen könnte.</p>
<p>Aber wie ich ja auch schon gesagt habe, sollte man das casten von void Pointern doch vermeiden. Es gibt meistens die Möglichkeit das zu verhindern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1397041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1397041</guid><dc:creator><![CDATA[Tobias W]]></dc:creator><pubDate>Sat, 03 Nov 2007 15:26:39 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf unbekannten Typen. on Wed, 12 Dec 2007 19:17:19 GMT]]></title><description><![CDATA[<p>Was bringt den ein Zeiger auf einen unbekannten Typen?! Irgendeinen Nutzen? Der Code wird dadurch doch nur unübersichtlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1419589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1419589</guid><dc:creator><![CDATA[C-Chris]]></dc:creator><pubDate>Wed, 12 Dec 2007 19:17:19 GMT</pubDate></item></channel></rss>