<?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[Template Funktion kann nicht aufgelöst werden. Wieso?]]></title><description><![CDATA[<p>Hallo Forum</p>
<p>Problembeschreibung:<br />
In meinen Programm wird mit dem Type Double gerechnet. Für das Schreiben und Einlesen der Daten gibt es aber Verschiedene Wertebereiche.<br />
Als Beispiel Nehmen wir mal x/y Koordinaten. Diese können einen Wert von 1000 bis -1000 haben. Dann noch Größen width/height. Die einen Wert von 1000 bis 0 haben.<br />
Beim Einlesen sollen diese Wertebereiche auch Überwacht werden und noch eine Werte-Abhänge Dinge gemacht werden.<br />
Dazu wollte ich eine Template Funktion in der Stream Klassen aufnehmen bei den der Template Parameter als Schalter dient. Hier ein Funktionierendes Beispiel.</p>
<pre><code>enum eType
{
  eType_Cord,
  eType_CordUnsigned,
};

struct Stream
{ 
  template &lt; eType e &gt;
  void attribute( double &amp; Data ) {}
};

struct DataPacket
{
  void serialize( Stream &amp;Stream)
  {
    Stream.attribute&lt; eType_Cord &gt; (mX);
    Stream.attribute&lt; eType_CordUnsigned &gt; (mWidth);
  }

  double  mX;
  double  mWidth;
}

int main(int Argc, char **ppArgv)
{
  Stream St;
  DataPacket Data;

  Data.serialize( St );

  return 0;
}
</code></pre>
<p>Soweit so gut. Funktioniert. Jetzt aber zu den Problem.<br />
Die Serialize Funktion muss mit unterschiedlichen Streams zurecht kommen. Also wird diese als Template Versehen. Und jetzt kann der Compiler das nicht mehr Auflösen. Wieso ???</p>
<pre><code>struct DataPacket
{
  template&lt; typename stream &gt;
  void serialize( stream &amp;Stream)
  {
    Stream.attribute&lt; eType_Cord &gt; (mX);
    Stream.attribute&lt; eType_CordUnsigned &gt; (mWidth);
  }

  double  mX;
  double  mWidth;
}
</code></pre>
<p>Gemeldeter Fehler.<br />
&quot;kein operator '&lt;' (eType_Cord)u0 für St.attribute gefunden&quot;</p>
<p>Kann mir vielleicht jemand das Verhalten erklären?</p>
<p>Lichtlein</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/312680/template-funktion-kann-nicht-aufgelöst-werden-wieso</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 17:50:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312680.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 11 Jan 2013 08:49:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Funktion kann nicht aufgelöst werden. Wieso? on Fri, 11 Jan 2013 08:49:34 GMT]]></title><description><![CDATA[<p>Hallo Forum</p>
<p>Problembeschreibung:<br />
In meinen Programm wird mit dem Type Double gerechnet. Für das Schreiben und Einlesen der Daten gibt es aber Verschiedene Wertebereiche.<br />
Als Beispiel Nehmen wir mal x/y Koordinaten. Diese können einen Wert von 1000 bis -1000 haben. Dann noch Größen width/height. Die einen Wert von 1000 bis 0 haben.<br />
Beim Einlesen sollen diese Wertebereiche auch Überwacht werden und noch eine Werte-Abhänge Dinge gemacht werden.<br />
Dazu wollte ich eine Template Funktion in der Stream Klassen aufnehmen bei den der Template Parameter als Schalter dient. Hier ein Funktionierendes Beispiel.</p>
<pre><code>enum eType
{
  eType_Cord,
  eType_CordUnsigned,
};

struct Stream
{ 
  template &lt; eType e &gt;
  void attribute( double &amp; Data ) {}
};

struct DataPacket
{
  void serialize( Stream &amp;Stream)
  {
    Stream.attribute&lt; eType_Cord &gt; (mX);
    Stream.attribute&lt; eType_CordUnsigned &gt; (mWidth);
  }

  double  mX;
  double  mWidth;
}

int main(int Argc, char **ppArgv)
{
  Stream St;
  DataPacket Data;

  Data.serialize( St );

  return 0;
}
</code></pre>
<p>Soweit so gut. Funktioniert. Jetzt aber zu den Problem.<br />
Die Serialize Funktion muss mit unterschiedlichen Streams zurecht kommen. Also wird diese als Template Versehen. Und jetzt kann der Compiler das nicht mehr Auflösen. Wieso ???</p>
<pre><code>struct DataPacket
{
  template&lt; typename stream &gt;
  void serialize( stream &amp;Stream)
  {
    Stream.attribute&lt; eType_Cord &gt; (mX);
    Stream.attribute&lt; eType_CordUnsigned &gt; (mWidth);
  }

  double  mX;
  double  mWidth;
}
</code></pre>
<p>Gemeldeter Fehler.<br />
&quot;kein operator '&lt;' (eType_Cord)u0 für St.attribute gefunden&quot;</p>
<p>Kann mir vielleicht jemand das Verhalten erklären?</p>
<p>Lichtlein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2288622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2288622</guid><dc:creator><![CDATA[Lichtlein]]></dc:creator><pubDate>Fri, 11 Jan 2013 08:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion kann nicht aufgelöst werden. Wieso? on Fri, 11 Jan 2013 08:51:53 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Stream.template attribute&lt; eType_Cord &gt; (mX);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2288625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2288625</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 11 Jan 2013 08:51:53 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion kann nicht aufgelöst werden. Wieso? on Fri, 11 Jan 2013 09:02:22 GMT]]></title><description><![CDATA[<p>... das darf nicht war sein. *grumpf*</p>
<p>Ich habe da Mindestens 1 Stunde dran herum gemacht und war so Dicht dran.<br />
Mein Lösungsansatz war:</p>
<pre><code>Stream.template &lt;&gt; attribute&lt; eType_Cord &gt; (mX);
</code></pre>
<p>Achtung, man beachte die größer/kleiner Zeichen hinter den template. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
<p>Danke.</p>
<p>Lichtlein</p>
<p>PS: Vielleicht sollte man Abends um 11Uhr nicht mehr versuchen solche Probleme zu Lösen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2288630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2288630</guid><dc:creator><![CDATA[Lichtlein]]></dc:creator><pubDate>Fri, 11 Jan 2013 09:02:22 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion kann nicht aufgelöst werden. Wieso? on Fri, 11 Jan 2013 09:06:58 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Stream.template attribute&lt; eType_Cord &gt; (mX);
</code></pre>
</blockquote>
<p>Das hab ich ja noch nie gesehen? Taucht dies und <code>::template</code> und <code>-&gt;template</code> in der Praxis häufig auf? Nicht oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2288631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2288631</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Fri, 11 Jan 2013 09:06:58 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion kann nicht aufgelöst werden. Wieso? on Fri, 11 Jan 2013 09:34:59 GMT]]></title><description><![CDATA[<p>Denke auch das es selten ist.</p>
<p>Hier mal mein Beispiel der Attribut Funktion wie sie dann auch fast so Benutzt wird.</p>
<pre><code>template&lt; eAppType e &gt;
cArchivOut&amp; attribute(const char * pName, 
                      typename sEnum2Type&lt; e &gt;:: type &amp; Value,
                      const typename sEnum2Type&lt; e &gt;::type &amp; DefautlValue)
{
  assert( sTypeTraits&lt; e &gt;::rangeCheck( Value ) );
  if(Value != DefaultValue)
  {
    mOut &lt;&lt; pName &lt;&lt; '=' &lt;&lt; Value &lt;&lt; &quot; // &quot;; 
    mOut &lt;&lt; sTypeTraits&lt; e &gt;::attributeComment() &lt;&lt; std::endl;
  }
  return *this;
}
</code></pre>
<p>Damit kann man schon einige Nette Sachen machen. <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>Das dann aufzurufen sieht dann im Code so aus.</p>
<pre><code>template&lt; typename archiv &gt;
archiv&amp; serialize( archiv &amp;Archiv)
{
  Archiv.template attribute&lt; eAppType_Cord &gt;(&quot;X&quot;, mX)
        .template attribute&lt; eAppType_Cord &gt;(&quot;Y&quot;, mY)
        .template attribute&lt; eAppType_CordUnsigned &gt;(&quot;Width&quot;, mWidth)
        .template attribute&lt; eAppType_CordUnsigned &gt;(&quot;Height&quot;, mHeight);
  return Archiv;
}
</code></pre>
<p>Ich denke da kann ich mich sehr gut dran gewöhnen. <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>Lichtlein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2288640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2288640</guid><dc:creator><![CDATA[Lichtlein]]></dc:creator><pubDate>Fri, 11 Jan 2013 09:34:59 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion kann nicht aufgelöst werden. Wieso? on Fri, 11 Jan 2013 09:36:21 GMT]]></title><description><![CDATA[<p>out schrieb:</p>
<blockquote>
<p>Taucht dies und <code>::template</code> und <code>-&gt;template</code> in der Praxis häufig auf? Nicht oder?</p>
</blockquote>
<p>Kommt auf deine Praxis an. Wenn du template-Member(funktionen) in deinen Klassen hast, wirst du es sicher oft benötigen. Es ist ein Element der Sprache so wie typename und man sollte sich merken, dass es das gibt. Ich habe es jedoch noch nie außerhalb des Forums benötigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2288641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2288641</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 11 Jan 2013 09:36:21 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion kann nicht aufgelöst werden. Wieso? on Fri, 11 Jan 2013 10:43:49 GMT]]></title><description><![CDATA[<p>Das ist ja auch der Grund, warum std::get&lt;N&gt;() keine Memberfunktion von std::tuple ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2288662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2288662</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Fri, 11 Jan 2013 10:43:49 GMT</pubDate></item></channel></rss>