<?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[datentypunabhängige Methoden?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte eine Methode schreiben, die unabhängig vom Typ des Eingabeargumentes eine Verarbeitung vornimmt. Bisher mache ich das per Überladung nach dem Schema:</p>
<pre><code class="language-cpp">void doPrint(int x) {
 printf(&quot;%i&quot;, x);
}

void doPrint(double x) {
 printf(&quot;%f&quot;, x);
}

usw.
</code></pre>
<p>Jetzt möchte ich nicht für jeden simplen Datentyp eine eigene Methode schreiben. Geht das auch eleganter? Ich denke da an so ein (theoretisches) Konstrukt:</p>
<pre><code class="language-cpp">void doPrint(&lt;universaltyp&gt; x) {
 switch (typeof(x)) {
   int: printf(&quot;%i&quot;, x);
   double: printf(&quot;%f&quot;, x);
   default: printf(&quot;error&quot;);
 }
}
</code></pre>
<p>Gruß, Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/147511/datentypunabhängige-methoden</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 09:09:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/147511.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 May 2006 14:49:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to datentypunabhängige Methoden? on Wed, 17 May 2006 14:49:19 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte eine Methode schreiben, die unabhängig vom Typ des Eingabeargumentes eine Verarbeitung vornimmt. Bisher mache ich das per Überladung nach dem Schema:</p>
<pre><code class="language-cpp">void doPrint(int x) {
 printf(&quot;%i&quot;, x);
}

void doPrint(double x) {
 printf(&quot;%f&quot;, x);
}

usw.
</code></pre>
<p>Jetzt möchte ich nicht für jeden simplen Datentyp eine eigene Methode schreiben. Geht das auch eleganter? Ich denke da an so ein (theoretisches) Konstrukt:</p>
<pre><code class="language-cpp">void doPrint(&lt;universaltyp&gt; x) {
 switch (typeof(x)) {
   int: printf(&quot;%i&quot;, x);
   double: printf(&quot;%f&quot;, x);
   default: printf(&quot;error&quot;);
 }
}
</code></pre>
<p>Gruß, Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1059631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059631</guid><dc:creator><![CDATA[Thomas++]]></dc:creator><pubDate>Wed, 17 May 2006 14:49:19 GMT</pubDate></item><item><title><![CDATA[Reply to datentypunabhängige Methoden? on Wed, 17 May 2006 14:54:29 GMT]]></title><description><![CDATA[<p>Ich denke die Angaben was Du machen willst sind zu ungenau... Wenn es wirklich nur um eine Ausgabe des richtigen Typs auf stdout geht nimmt man doch eher ein Template, aber ich denke Du möchtest in Wirklichkeit noch etwas mehr in den Funktionen machen.</p>
<pre><code class="language-cpp">template&lt;typename Ty&gt;
void doPrint(const Ty&amp; x) {
  cout &lt;&lt; x;
}
</code></pre>
<p>Funktioniert vollautomatisch für alle Datentypen für die es ein ostream&amp; operator&lt;&lt; gibt.</p>
<p>Sowas wie einen Universaltyp den man zru Laufzeit auflösen kann gibt es nicht. Evtl. über Template-Spezialisierung?</p>
<pre><code class="language-cpp">template&lt;typename Universal&gt;
void doPrint(const Universal&amp; x)
{
  printf(&quot;error&quot;);
}

template&lt;&gt;
void doPrint(const int&amp; x)
{
  printf(&quot;%i&quot;, x);
}

template&lt;&gt;
void doPrint(const double&amp; x)
{ 
  print(&quot;%f&quot;, x);
}
</code></pre>
<p>Hm, ist nur auch wieder für jeden Typ eine Methode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1059635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059635</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 17 May 2006 14:54:29 GMT</pubDate></item><item><title><![CDATA[Reply to datentypunabhängige Methoden? on Wed, 17 May 2006 14:55:31 GMT]]></title><description><![CDATA[<p>Ja, mit C++ I/O Streams und Templates.<br />
Da du printf in deinem Code stehen hast, hoffe ich nicht das du aus der C-Ecke kommst.</p>
<p>Denn sonst kannst du beides vergessen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<pre><code class="language-cpp">template&lt;typename type&gt; void print(const type&amp; x)
{
   cout &lt;&lt;x;
}
</code></pre>
<p>Bei den Artikel sollte auch noch was dazu stehen....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1059637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059637</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 17 May 2006 14:55:31 GMT</pubDate></item><item><title><![CDATA[Reply to datentypunabhängige Methoden? on Wed, 17 May 2006 14:55:17 GMT]]></title><description><![CDATA[<p>Ich glaube was du suchst sind Templates.<br />
<a href="http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht1Ht/c++_funktionsschablone_de" rel="nofollow">http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht1Ht/c++_funktionsschablone_de</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1059638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059638</guid><dc:creator><![CDATA[EEK]]></dc:creator><pubDate>Wed, 17 May 2006 14:55:17 GMT</pubDate></item><item><title><![CDATA[Reply to datentypunabhängige Methoden? on Wed, 17 May 2006 18:51:43 GMT]]></title><description><![CDATA[<p>Ich danke euch.<br />
Mit Templates hab ich mich noch nicht weiter beschäftigt, aber das Echo sagt mir, dass ich es mal tun sollte. <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/1059797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059797</guid><dc:creator><![CDATA[Thomas++]]></dc:creator><pubDate>Wed, 17 May 2006 18:51:43 GMT</pubDate></item><item><title><![CDATA[Reply to datentypunabhängige Methoden? on Wed, 17 May 2006 19:04:56 GMT]]></title><description><![CDATA[<p>und wer schon</p>
<pre><code class="language-cpp">template&lt;typename type&gt; void print(const type&amp; x)
{
   cout &lt;&lt;x;
}
</code></pre>
<p>schreibt, der kann normal auch</p>
<pre><code class="language-cpp">cout &lt;&lt;x;
</code></pre>
<p>schreiben^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1059802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059802</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 17 May 2006 19:04:56 GMT</pubDate></item><item><title><![CDATA[Reply to datentypunabhängige Methoden? on Wed, 17 May 2006 19:43:49 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>und wer schon</p>
<pre><code class="language-cpp">template&lt;typename type&gt; void print(const type&amp; x)
{
   cout &lt;&lt;x;
}
</code></pre>
<p>schreibt, der kann normal auch</p>
<pre><code class="language-cpp">cout &lt;&lt;x;
</code></pre>
<p>schreiben^^</p>
</blockquote>
<p>Jo, schon klar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> sollte ja nur seinem Beispiel angepasst werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1059827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059827</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 17 May 2006 19:43:49 GMT</pubDate></item><item><title><![CDATA[Reply to datentypunabhängige Methoden? on Thu, 18 May 2006 07:53:28 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>und wer schon</p>
<pre><code class="language-cpp">template&lt;typename type&gt; void print(const type&amp; x)
{
   cout &lt;&lt;x;
}
</code></pre>
<p>schreibt, der kann normal auch</p>
<pre><code class="language-cpp">cout &lt;&lt;x;
</code></pre>
<p>schreiben^^</p>
</blockquote>
<p>ich glaube, du hast da was übersehen, otze.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

using namespace std;

template&lt;typename T&gt;
void print(const T &amp;x) { cout &lt;&lt; x &lt;&lt; endl; }

int main()
{
    vector&lt;int&gt; v;
    v.push_back(43);
    v.push_back(42);
    v.push_back(39);
    for_each(v.begin(), v.end(), print&lt;int&gt;);
}
</code></pre>
<p>klar kann man auch schreiben:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;

using namespace std;

int main()
{
    vector&lt;int&gt; v;
    v.push_back(43);
    v.push_back(42);
    v.push_back(39);
    copy(v.begin(), v.end(), ostream_iterator&lt;int&gt;(cout, &quot;\n&quot;));
}
</code></pre>
<p>aber wenn man das an 1000 stellen verwendet hat und plötzlich jede ausgabe verändert werden soll, steht man natürlich besser da, wenn man nur die print-Funktion anzupassen braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1059955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059955</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Thu, 18 May 2006 07:53:28 GMT</pubDate></item><item><title><![CDATA[Reply to datentypunabhängige Methoden? on Thu, 18 May 2006 09:14:21 GMT]]></title><description><![CDATA[<p>Ich möchte die Typumwandlung vereinheitlichen.</p>
<p>In einer XML-Datei im UTF-8 Format sollen verschiedene Daten abgelegt werden, dazu ist es notwendig, den jeweiligen Typ in ein Wide Character Format umzuwandeln.</p>
<pre><code class="language-cpp">BSTR int2BSTR(int n)
{
	WCHAR chBuf[60];
	swprintf(chBuf, L&quot;%i&quot;, n);
	return SysAllocString(chBuf);
}

BSTR float2BSTR(float f)
{
	WCHAR chBuf[60];
	swprintf(chBuf, L&quot;%f&quot;, f);
	return SysAllocString(chBuf);
}
</code></pre>
<p>Hier wäre es ja zum Beispiel sinnvoll, wenn die erste Methode auch Untermengen von Integer verarbeiten könnte (char, byte, usw.), während sich die zweite Methode auch double vornehmen könnte.</p>
<p>Ist die Bezugnahme auf spezielle Typen das, was mit Template-Spezialisierung gemeint ist?</p>
<p>Wie sage ich beispielsweise der ersten Methode, dass sie int, char und byte annehmen soll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1059984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059984</guid><dc:creator><![CDATA[Thomas++]]></dc:creator><pubDate>Thu, 18 May 2006 09:14:21 GMT</pubDate></item><item><title><![CDATA[Reply to datentypunabhängige Methoden? on Thu, 18 May 2006 09:16:53 GMT]]></title><description><![CDATA[<p>Thomas++ schrieb:</p>
<blockquote>
<p>Hier wäre es ja zum Beispiel sinnvoll, wenn die erste Methode auch Untermengen von Integer verarbeiten könnte (char, byte, usw.), während sich die zweite Methode auch double vornehmen könnte.</p>
</blockquote>
<p>Kann sie - Stichwort &quot;implizite Typumwandlung&quot;</p>
<p>(wobei ich eher eine double2BSTR() verwenden würde, die (auch) mit float-Werten gefüttert werden kann)</p>
<p>PS: Für diese Umwandlung solltest du auch lieber C++ Metohden verwenden:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
BSTR toBSTR(const T&amp; val)
{
  wstringstream strm;
  strm&lt;&lt;val;
  return SysAllocString(strm.str().c_str());
}
</code></pre>
<p>(das &quot;erschlägt&quot; jeden Datentyp, der auf einen wchar_t-Stream ausgegeben werden kann)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1059988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059988</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 18 May 2006 09:16:53 GMT</pubDate></item></channel></rss>