<?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[templateklasse und inline]]></title><description><![CDATA[<p>Hi ihrs!</p>
<p>Ich hab da mal eine frage wie man inline bei template-klassen, deren funktionen nicht direkt in der klasse implementiert werden, benutzt wird.</p>
<p>aktuell hab ich 3 varianten, aber ich weiß nicht welche die richtige ist.</p>
<pre><code class="language-cpp">// Variante 1:
template&lt;class T&gt; struct CKlasse
{
    inline void foobar ();
};

template&lt;class T&gt; void CKlasse::foobar ()
{
}

// Variante 2:
template&lt;class T&gt; struct CKlasse
{
    void foobar ();
};

template&lt;class T&gt; inline void CKlasse::foobar ()
{
}

// Variante 2:
template&lt;class T&gt; struct CKlasse
{
    inline void foobar ();
};

template&lt;class T&gt; inline void CKlasse::foobar ()
{
}
</code></pre>
<p>lustig ist, das ich inline überall hinschreiben kann, aber sowas wie virtual oder static nur bei der deklaration, aber nicht bei der implementierung. <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>wie wirds nun richtig gemacht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224900/templateklasse-und-inline</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 21:11:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224900.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Oct 2008 13:30:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to templateklasse und inline on Thu, 16 Oct 2008 13:30:07 GMT]]></title><description><![CDATA[<p>Hi ihrs!</p>
<p>Ich hab da mal eine frage wie man inline bei template-klassen, deren funktionen nicht direkt in der klasse implementiert werden, benutzt wird.</p>
<p>aktuell hab ich 3 varianten, aber ich weiß nicht welche die richtige ist.</p>
<pre><code class="language-cpp">// Variante 1:
template&lt;class T&gt; struct CKlasse
{
    inline void foobar ();
};

template&lt;class T&gt; void CKlasse::foobar ()
{
}

// Variante 2:
template&lt;class T&gt; struct CKlasse
{
    void foobar ();
};

template&lt;class T&gt; inline void CKlasse::foobar ()
{
}

// Variante 2:
template&lt;class T&gt; struct CKlasse
{
    inline void foobar ();
};

template&lt;class T&gt; inline void CKlasse::foobar ()
{
}
</code></pre>
<p>lustig ist, das ich inline überall hinschreiben kann, aber sowas wie virtual oder static nur bei der deklaration, aber nicht bei der implementierung. <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>wie wirds nun richtig gemacht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599947</guid><dc:creator><![CDATA[Monjon]]></dc:creator><pubDate>Thu, 16 Oct 2008 13:30:07 GMT</pubDate></item><item><title><![CDATA[Reply to templateklasse und inline on Thu, 16 Oct 2008 15:08:49 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>imho ist alles gleichgültig und richtig. Nur das bei dir ein &lt;T&gt; hinter CKlasse fehlt ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599994</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 16 Oct 2008 15:08:49 GMT</pubDate></item><item><title><![CDATA[Reply to templateklasse und inline on Thu, 16 Oct 2008 17:40:37 GMT]]></title><description><![CDATA[<p>Bei Templates spielt <code>inline</code> eigentlich keine Rolle, da die Definition sowieso im Header stehen muss.</p>
<p>Auch bei normalen Klassen sollte man <code>inline</code> nicht zu früh einsetzen, weil der Compiler diesbezüglich gut optimieren kann. Man sollte es erst in Betracht ziehen, wenn es einem auf Nanosekunden drauf an kommt und man sich auch ernsthaft damit befasst (Profiler, Laufzeitanalyse, Benchmarks).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600064</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 16 Oct 2008 17:40:37 GMT</pubDate></item><item><title><![CDATA[Reply to templateklasse und inline on Fri, 17 Oct 2008 06:23:45 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Bei Templates spielt <code>inline</code> eigentlich keine Rolle, da die Definition sowieso im Header stehen muss.</p>
</blockquote>
<p>Ob die Definition im Header steht, oder nicht, hat <strong>überhaupt</strong> keine Auswirkung auf das inlining. Der Standard besagt lediglich, dass eine Definition einer Funktion in der Klassendefinition diese zu inline macht.</p>
<p>ISO/IEC 14882 / 9.3/3 schrieb:</p>
<blockquote>
<p>An inline member function (whether static or nonstatic) may also be defined outside of its class definition<br />
provided either its declaration in the class definition or its definition outside of the class definition declares the function as inline.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1600223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600223</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 17 Oct 2008 06:23:45 GMT</pubDate></item><item><title><![CDATA[Reply to templateklasse und inline on Fri, 17 Oct 2008 12:09:09 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Ob die Definition im Header steht, oder nicht, hat <strong>überhaupt</strong> keine Auswirkung auf das inlining.</p>
</blockquote>
<p>Ja, aber praktisch (modulare Programmierung) sieht es dann schon so aus, dass Inline-Methoden im Header definiert werden und &quot;normale&quot; ausserhalb (auf Nicht-Template-Klassen bezogen). Also eher der umgekehrte Schluss: Inlining hat Auswirkungen darauf, wo man die Definition hinzusetzen hat.</p>
<p>Templates müssen ohne <code>export</code> sowieso vollständig im Header implementiert sein. Man kann aber das Schlüsselwort <code>inline</code> mit Templates nicht direkt in Verbindung bringen, oder? Bzw. dort bewirkt es gar nichts?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600378</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 17 Oct 2008 12:09:09 GMT</pubDate></item><item><title><![CDATA[Reply to templateklasse und inline on Fri, 17 Oct 2008 14:35:18 GMT]]></title><description><![CDATA[<p>inlining hat nur wenig mit im Header oder nicht im Header zu tun. Es geht einzig darum, dass in der Klassendefinition definierte Methoden implizit inline deklariert sind.<br />
- Wenn du also zwar im Header, aber außerhalb der Klassendefinition die Methode definierst, ist sie nicht automatisch inline.<br />
- dass templates nicht in gesonderten Übersetzungseinheiten definiert werden können hat mit inlining nichts zu tun und hat auch keine Auswirkungen darauf.<br />
- (klassisches) inlining zur Compilezeit wird allerdings verhindert, wenn die Definition der Methode in einer anderen Übersetzungseinheit liegt als der Aufruf<br />
- es gibt allerdings Compiler die inlining zur Linkzeit ausführen können, oder bei speziellen Umgebungen (VMs etc.) auch später (z.B. wenn der Code dynamisch geladen wird)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600472</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 17 Oct 2008 14:35:18 GMT</pubDate></item><item><title><![CDATA[Reply to templateklasse und inline on Sat, 18 Oct 2008 08:42:15 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Ob die Definition im Header steht, oder nicht, hat <strong>überhaupt</strong> keine Auswirkung auf das inlining.</p>
</blockquote>
<p>Ja, aber praktisch (modulare Programmierung) sieht es dann schon so aus, dass Inline-Methoden im Header definiert werden und &quot;normale&quot; ausserhalb (auf Nicht-Template-Klassen bezogen). Also eher der umgekehrte Schluss: Inlining hat Auswirkungen darauf, wo man die Definition hinzusetzen hat.</p>
<p>Templates müssen ohne <code>export</code> sowieso vollständig im Header implementiert sein. Man kann aber das Schlüsselwort <code>inline</code> mit Templates nicht direkt in Verbindung bringen, oder? Bzw. dort bewirkt es gar nichts?</p>
</blockquote>
<p>Nein und Nein.</p>
<p>Du kannst (und das habe ich auch oft gesehen + mache ich auch selbst), dass, wenn inline angebracht ist das auch in der cpp gemacht wird und nicht um jeden Preis in den Header stopfen. (vor allem, wenn man getter und setter nicht in der Klassendefinition haben will).</p>
<p>Doch auch in Verbindung mit Templates macht inlining durchaus Sinn und wird äquivalent zu Klassen gehandhabt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600698</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 18 Oct 2008 08:42:15 GMT</pubDate></item><item><title><![CDATA[Reply to templateklasse und inline on Sat, 18 Oct 2008 14:28:03 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Du kannst (und das habe ich auch oft gesehen + mache ich auch selbst), dass, wenn inline angebracht ist das auch in der cpp gemacht wird und nicht um jeden Preis in den Header stopfen. (vor allem, wenn man getter und setter nicht in der Klassendefinition haben will).</p>
</blockquote>
<p>Bei mehreren CPP-Dateien funktioniert das aber schlecht. Darauf wollte ich auch hinaus.</p>
<pre><code class="language-cpp">// MyClass.hpp
class MyClass
{
	public:
		inline void Func();
};
</code></pre>
<pre><code class="language-cpp">// MyClass.cpp
#include &quot;MyClass.hpp&quot;

inline void MyClass::Func()
{

}
</code></pre>
<pre><code class="language-cpp">// Main.cpp
#include &quot;MyClass.hpp&quot;

int main()
{
	MyClass x;
	x.Func();
}
</code></pre>
<p>Diese Konstellation führt zu einem Linkerfehler, weil in Main.cpp ein nicht aufgelöster Verweis auf <code>MyClass::Func()</code> besteht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600829</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 18 Oct 2008 14:28:03 GMT</pubDate></item></channel></rss>