<?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[Templatedeklaration]]></title><description><![CDATA[<p>Ich versuche das Laufzeitverhalten eines Algorithmus mittels Templates zu verbessern.<br />
Dabei bin ich auf ein Verständnisproblem gestossen.<br />
Ich gebe hier mal ein kleines Beispiel:</p>
<p>Ich möchte in main.cpp verschiedene templates (genau 2) von &quot;tester&quot; verwenden:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &quot;test.h&quot;

void main()
{
  templates t;

  printf_s(&quot;%d\n&quot;, t.tester&lt;1, 0&gt;());
  printf_s(&quot;%d\n&quot;, t.tester&lt;0, 1&gt;());
}
</code></pre>
<p>Die Header-Datei &quot;test.h&quot; sieht wie folgt aus:</p>
<pre><code class="language-cpp">#ifndef MOVE_H_INCLUDED
#define MOVE_H_INCLUDED

class templates
{
public:
  template&lt;int X, int Y&gt;
  int tester() const;
};

#endif
</code></pre>
<p>Es ist klar, dass der Linker die Funktionen<br />
&quot;int templates::tester&lt;1,0&gt;(void) const&quot;<br />
und<br />
&quot;int templates::tester&lt;0,1&gt;(void) const&quot;<br />
nicht finden kann.</p>
<p>Das ist die Quelldatei &quot;test.cpp&quot;:</p>
<pre><code class="language-cpp">#include &quot;test.h&quot;

template&lt;int X, int Y&gt;
int templates::tester() const
{
  return 2 * X + 3 * Y;
}
</code></pre>
<p>Aber wie muss ich die beiden Templates deklarieren?</p>
<p>Sorry, habe das Prinzip wohl noch nicht ganz verstanden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/265423/templatedeklaration</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 07:36:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/265423.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Apr 2010 17:50:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templatedeklaration on Thu, 22 Apr 2010 17:51:26 GMT]]></title><description><![CDATA[<p>Ich versuche das Laufzeitverhalten eines Algorithmus mittels Templates zu verbessern.<br />
Dabei bin ich auf ein Verständnisproblem gestossen.<br />
Ich gebe hier mal ein kleines Beispiel:</p>
<p>Ich möchte in main.cpp verschiedene templates (genau 2) von &quot;tester&quot; verwenden:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &quot;test.h&quot;

void main()
{
  templates t;

  printf_s(&quot;%d\n&quot;, t.tester&lt;1, 0&gt;());
  printf_s(&quot;%d\n&quot;, t.tester&lt;0, 1&gt;());
}
</code></pre>
<p>Die Header-Datei &quot;test.h&quot; sieht wie folgt aus:</p>
<pre><code class="language-cpp">#ifndef MOVE_H_INCLUDED
#define MOVE_H_INCLUDED

class templates
{
public:
  template&lt;int X, int Y&gt;
  int tester() const;
};

#endif
</code></pre>
<p>Es ist klar, dass der Linker die Funktionen<br />
&quot;int templates::tester&lt;1,0&gt;(void) const&quot;<br />
und<br />
&quot;int templates::tester&lt;0,1&gt;(void) const&quot;<br />
nicht finden kann.</p>
<p>Das ist die Quelldatei &quot;test.cpp&quot;:</p>
<pre><code class="language-cpp">#include &quot;test.h&quot;

template&lt;int X, int Y&gt;
int templates::tester() const
{
  return 2 * X + 3 * Y;
}
</code></pre>
<p>Aber wie muss ich die beiden Templates deklarieren?</p>
<p>Sorry, habe das Prinzip wohl noch nicht ganz verstanden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1886907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1886907</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Thu, 22 Apr 2010 17:51:26 GMT</pubDate></item><item><title><![CDATA[Reply to Templatedeklaration on Thu, 22 Apr 2010 17:53:06 GMT]]></title><description><![CDATA[<p>FAQ: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39467.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39467.html</a></p>
<p>Allerdings wenn ich so Dinge wie <code>printf_s</code> oder <code>&lt;stdio.h&gt;</code> lese, frage ich mich, ob du nicht zuerst mal C++ lernen solltest?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1886909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1886909</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 22 Apr 2010 17:53:06 GMT</pubDate></item><item><title><![CDATA[Reply to Templatedeklaration on Thu, 22 Apr 2010 19:12:29 GMT]]></title><description><![CDATA[<p>Mit Inline Funktionen klappt es. Aber mit externer Bindung noch nicht.</p>
<pre><code class="language-cpp">#ifndef MOVE_H_INCLUDED
#define MOVE_H_INCLUDED

const int WHITE = 0;
const int BLACK = 1;

class templates
{
public:
  template&lt;int M, int Y&gt;
  int tester() const;
};

template&lt;&gt;
inline int templates::tester&lt;WHITE, BLACK&gt;() const
{
  return 2 * WHITE + 3 * BLACK;
}

template&lt;&gt;
inline int templates::tester&lt;BLACK, WHITE&gt;() const
{
  return 2 * BLACK + 3 * WHITE;
}

#endif

#include &lt;stdio.h&gt;
#include &quot;move.h&quot;

void main()
{
  templates t;

  printf_s(&quot;%d\n&quot;, t.tester&lt;WHITE, BLACK&gt;());
  printf_s(&quot;%d\n&quot;, t.tester&lt;BLACK, WHITE&gt;());
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1886927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1886927</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Thu, 22 Apr 2010 19:12:29 GMT</pubDate></item><item><title><![CDATA[Reply to Templatedeklaration on Thu, 22 Apr 2010 19:10:31 GMT]]></title><description><![CDATA[<p>Templateklassen/-funktionen müssen in der Header Datei implementiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1886940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1886940</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Thu, 22 Apr 2010 19:10:31 GMT</pubDate></item><item><title><![CDATA[Reply to Templatedeklaration on Thu, 22 Apr 2010 19:16:55 GMT]]></title><description><![CDATA[<p>Tomahawk schrieb:</p>
<blockquote>
<p>Mit Inline Funktionen klappt es. Aber mit externer Bindung noch nicht.</p>
</blockquote>
<p>Was ist denn nun genau das Problem? Wo dein Fehler vorhin lag, hast du verstanden?</p>
<p>Tomahawk schrieb:</p>
<blockquote>
<p>Worin liegt denn der Vorteil von Streams für simple Konsolenanwendungen gegenüber files?</p>
</blockquote>
<p>Unter anderem Typsicherheit, automatische Speicherverwaltung (z.B. von <code>std::fstream</code> gegenüber <code>FILE*</code> ) und die Möglichkeit, mit Nicht-POD-Objekten zu arbeiten.</p>
<p>Aber Dravere meinte wahrscheinlich primär, dass weder der Header <code>&lt;stdio.h&gt;</code> noch die Funktion <code>printf_s()</code> Bestandteile von C++ sind. Wenigstens <code>&lt;cstdio&gt;</code> solltest du verwenden. Die Deklaration <code>void main()</code> ist übrigens auch falsch und zwar schon seit immer. Korrekt wäre <code>int main()</code> , überaus tolerante Compiler ändern daran nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1886944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1886944</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 22 Apr 2010 19:16:55 GMT</pubDate></item></channel></rss>