<?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 Funktionen versus Inline Funktionen]]></title><description><![CDATA[<p><strong>Ganz einfache Frage</strong></p>
<p>Kann ich beim Einsatz von Inline-Funktionen (global innerhalb einer Headerdatei) auf Templates verzichten?</p>
<p><strong>Beispiel a.h</strong></p>
<pre><code class="language-cpp">#ifndef A_H
#define A_H

inline int foo(int a, int b) {
  return v[a][b];
}

template&lt;int A, int B&gt;
inline int foo_t() {
  return v[A][B];
}

#endif
</code></pre>
<p>Ich denke schon, dass der Einsatz eines Templates ala foo_t() unsinnig ist, da die Inline-Funktion an der Stelle des Aufrufs expandiert wird. Somit wäre die Performance identisch!?</p>
<p>Stimmt das so?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/265842/template-funktionen-versus-inline-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 18:25:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/265842.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 29 Apr 2010 16:56:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Thu, 29 Apr 2010 16:58:05 GMT]]></title><description><![CDATA[<p><strong>Ganz einfache Frage</strong></p>
<p>Kann ich beim Einsatz von Inline-Funktionen (global innerhalb einer Headerdatei) auf Templates verzichten?</p>
<p><strong>Beispiel a.h</strong></p>
<pre><code class="language-cpp">#ifndef A_H
#define A_H

inline int foo(int a, int b) {
  return v[a][b];
}

template&lt;int A, int B&gt;
inline int foo_t() {
  return v[A][B];
}

#endif
</code></pre>
<p>Ich denke schon, dass der Einsatz eines Templates ala foo_t() unsinnig ist, da die Inline-Funktion an der Stelle des Aufrufs expandiert wird. Somit wäre die Performance identisch!?</p>
<p>Stimmt das so?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890040</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Thu, 29 Apr 2010 16:58:05 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Thu, 29 Apr 2010 17:00:30 GMT]]></title><description><![CDATA[<p>Warum machst du da überhaupt ein template hin?!</p>
<p>Performance mässig wird das schon einen Unterschied machen, aber das kommt daher, dass beim foo_t die Parameter nicht variable (zur Laufzeit) sind und somit kann das sicher einfacher umgesetzt werden.</p>
<p>Aber eine solche Performance Überlegung ist hier unsinnig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890046</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 29 Apr 2010 17:00:30 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Thu, 29 Apr 2010 17:36:49 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Warum machst du da überhaupt ein template hin?!</p>
<p>Performance mässig wird das schon einen Unterschied machen, aber das kommt daher, dass beim foo_t die Parameter nicht variable (zur Laufzeit) sind und somit kann das sicher einfacher umgesetzt werden.</p>
<p>Aber eine solche Performance Überlegung ist hier unsinnig.</p>
</blockquote>
<p>Naja, das ist nicht unbedingt unsinnig, sondern soll nur ein einfaches kontextfreies Beispiel sein. Man überlege, eine Engine bestehe aus einigen Template-Funktionen, deren Funktionalität darin bestehe, ihre Aufgaben auf kleine Inline Funktionen zu verteilen. Dann stehen die &quot;Übergabeparameter&quot; bereits zur Compilezeit fest und der Einsatz von zusätzlichen Inline-Funktionstemplates ist überflüssig.</p>
<p>Sorry, habe die Problematik ungenau beschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890070</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Thu, 29 Apr 2010 17:36:49 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Thu, 29 Apr 2010 17:38:53 GMT]]></title><description><![CDATA[<p>Naja - selbst, wenn es zur Compilezeit bekannt ist, würde ich kein template aus so ner Fkt machen...<br />
Erstens kann der Compiler dann auch so optimieren, wenn er das für nötig hält (und du ihn lässt) und 2. macht das vll pro aufruf 2 Takte aus... wär mir zu wenig, um dafür so was hässliches zu bauen...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890073</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 29 Apr 2010 17:38:53 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Thu, 29 Apr 2010 18:14:01 GMT]]></title><description><![CDATA[<p>2 Takte?</p>
<p>2 Takte sind geboten.<br />
Höre ich 3?<br />
Wer bietet 3 Takte?<br />
2 Takte zum 1, 2 Takte zum 2, verkauft...</p>
<p>Die inline-Funktion wurde für zusätzliche 2 Takte an den unfähigen Typen verkauft...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890090</guid><dc:creator><![CDATA[Auktionator]]></dc:creator><pubDate>Thu, 29 Apr 2010 18:14:01 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Thu, 29 Apr 2010 19:58:29 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22478">@Tomahawk</a>:<br />
Guck einfach was der Compiler für Code draus macht. In einem Release-Build mit eingeschalteten Optimierungen sollte das gleiche rauskommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890155</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 29 Apr 2010 19:58:29 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Thu, 29 Apr 2010 20:05:16 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22478">@Tomahawk</a>:<br />
Guck einfach was der Compiler für Code draus macht. In einem Release-Build mit eingeschalteten Optimierungen sollte das gleiche rauskommen.</p>
</blockquote>
<p>Hmm. Ich denke, dass da minimal was kürzeres rauskommt bei der template Version, weil ja die Parameter nicht dynamisch sind. Ich hätte mal so gesagt, dass irgendwie eine Inderektion weniger raus kommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890161</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 29 Apr 2010 20:05:16 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Thu, 29 Apr 2010 20:19:50 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22478">@Tomahawk</a>:<br />
Guck einfach was der Compiler für Code draus macht. In einem Release-Build mit eingeschalteten Optimierungen sollte das gleiche rauskommen.</p>
</blockquote>
<p>Hmm. Ich denke, dass da minimal was kürzeres rauskommt bei der template Version, weil ja die Parameter nicht dynamisch sind. Ich hätte mal so gesagt, dass irgendwie eine Inderektion weniger raus kommt.</p>
</blockquote>
<p>ich denke, er wird eine multiplikation und eine addition sparen - aber so ganz sicher kann man sich erst sein, wenn man es mal ausprobiert hat - hatte ja auch die ganze zeit schon gehofft, dass es jmd ausprobiert, da ich selbst zu faul bin : D</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890166</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 29 Apr 2010 20:19:50 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Thu, 29 Apr 2010 20:32:35 GMT]]></title><description><![CDATA[<p>Äh.<br />
Ich gehe selbstverständlich von einen fairen und sinnvollen Vergleich aus.<br />
D.h. beide Funktionen müssen gleich aufgerufen werden.</p>
<p>Da die Template Funktion nur mit Konstanten funktioniert muss natürlich die inline Funktion auch mit Konstanten aufgerufen werden.</p>
<p>Der Code der dabei dann rauskomme sollte dann besser der gleiche sein, sonst würde ich mich um einen neuen Compiler umsehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890173</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 29 Apr 2010 20:32:35 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Thu, 29 Apr 2010 20:34:58 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22478">@Tomahawk</a>:<br />
Guck einfach was der Compiler für Code draus macht. In einem Release-Build mit eingeschalteten Optimierungen sollte das gleiche rauskommen.</p>
</blockquote>
<p>Hmm. Ich denke, dass da minimal was kürzeres rauskommt bei der template Version, weil ja die Parameter nicht dynamisch sind. Ich hätte mal so gesagt, dass irgendwie eine Inderektion weniger raus kommt.</p>
</blockquote>
<p>ich denke, er wird eine multiplikation und eine addition sparen - aber so ganz sicher kann man sich erst sein, wenn man es mal ausprobiert hat - hatte ja auch die ganze zeit schon gehofft, dass es jmd ausprobiert, da ich selbst zu faul bin : D</p>
<p>bb</p>
</blockquote>
<p>Aber - wie schon erwähnt - wird der Compiler wahrscheinlich in beiden Versionen denselben Code generieren - ohne Indirektionen. Weil die Inline Funktionen von Template-Funktionen aufgerufen werden (sind nur vereinfachte &quot;sinnlose&quot; Beispiele).</p>
<pre><code class="language-cpp">// a.h

#ifndef A_H
#define A_H

inline int foo(int x, int y) {
  return v[a][b];
}

#endif

// b.h

#ifndef B_H
#define B_H

extern int func_b(int z);

#endif

// b.cpp

#include &quot;a.h&quot;
#include &quot;b.h&quot;

namespace {
  template&lt;int X, int Y&gt;
  int temp_b() {
    return foo(X, Y);
  }
}

int func_b(int z) {
  return (z == 0) ? temp_b&lt;27, 8&gt;() : temp_b&lt;7, 13&gt;;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1890176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890176</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Thu, 29 Apr 2010 20:34:58 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Thu, 29 Apr 2010 20:36:16 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Äh.<br />
Ich gehe selbstverständlich von einen fairen und sinnvollen Vergleich aus.<br />
D.h. beide Funktionen müssen gleich aufgerufen werden.</p>
<p><strong>Da die Template Funktion nur mit Konstanten funktioniert muss natürlich die inline Funktion auch mit Konstanten aufgerufen werden</strong>.</p>
<p>Der Code der dabei dann <strong>rauskomme sollte dann besser der gleiche sein</strong>, sonst würde ich mich um einen neuen Compiler umsehen.</p>
</blockquote>
<p>Jep, so sollte es logischerweise sein!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890177</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Thu, 29 Apr 2010 20:36:16 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Thu, 29 Apr 2010 20:39:08 GMT]]></title><description><![CDATA[<p>Tomahawk schrieb:</p>
<blockquote>
<p>Kann ich beim Einsatz von Inline-Funktionen (global innerhalb einer Headerdatei) auf Templates verzichten?</p>
</blockquote>
<p>Darf ich hier mal Gegenfragen, ob du die Frage wirklich so allgemein verstehst oder ob du es wirklich nur auf solche Funktionen reduzieren willst, wie du sie hier als Beispiele präsentierst? Also nur Funktionstemplates von diesem einen speziellen Typen? Will nur sicher gehen <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890180</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 29 Apr 2010 20:39:08 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Thu, 29 Apr 2010 20:49:25 GMT]]></title><description><![CDATA[<p>[quote=&quot;drakon&quot;]</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Hmm. Ich denke, dass da minimal was kürzeres rauskommt bei der template Version, weil ja die Parameter nicht dynamisch sind. Ich hätte mal so gesagt, dass irgendwie eine Inderektion weniger raus kommt.</p>
</blockquote>
<p>Das hängt davon ab, ob er der Funktion Konstanten übergibt oder nicht. Sonst kann der Compiler da natürlich auch optimieren. Alles in allem aber eine ziemlich unnötige Überlegung hier.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890188</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Thu, 29 Apr 2010 20:49:25 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Thu, 29 Apr 2010 21:17:11 GMT]]></title><description><![CDATA[<p>Tomahawk, du solltest Nicht-Template-Funktionen soweit möglich in .cpp-Dateien definieren. Somit ersparst du dir unnötige Abhängigkeiten und reduzierst die Kompilierzeit. Wenn du Templates brauchst, nimmst du Templates. Aber mach dir nicht zu viele unnötige Gedanken um die Performance, sonst wird deine Schach-Engine niemals fertig. Ich denke nicht, dass du am Schluss wegen Funktionsaufrufen in Schwierigkeiten kommst, da wirst du genügend andere Probleme haben. Viel wichtiger ist es, auf sauberen Code und eine gute Kapselung zu achten, das erleichtert spätere Optimierungen nämlich enorm.</p>
<p>FrEEzE2046 schrieb:</p>
<blockquote>
<p>Das hängt davon ab, ob er der Funktion Konstanten übergibt oder nicht. Sonst kann der Compiler da natürlich auch optimieren. Alles in allem aber eine ziemlich unnötige Überlegung hier.</p>
</blockquote>
<p>Stimmt, die Wiederholung von bereits Gesagtem ist hingegen viel nötiger hier. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890195</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 29 Apr 2010 21:17:11 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Fri, 30 Apr 2010 05:22:36 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Tomahawk, du solltest Nicht-Template-Funktionen soweit möglich in .cpp-Dateien definieren. Somit ersparst du dir unnötige Abhängigkeiten und reduzierst die Kompilierzeit. Wenn du Templates brauchst, nimmst du Templates. Aber mach dir nicht zu viele unnötige Gedanken um die Performance, sonst wird deine Schach-Engine niemals fertig. Ich denke nicht, dass du am Schluss wegen Funktionsaufrufen in Schwierigkeiten kommst, da wirst du genügend andere Probleme haben. Viel wichtiger ist es, auf sauberen Code und eine gute Kapselung zu achten, das erleichtert spätere Optimierungen nämlich enorm.</p>
</blockquote>
<p>Hi <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /><br />
Würde auch nie eine Template-Funktion einsetzten, wenn diese keine messbare Zeitersparnis bringt. Die Kompilierzeit ist eher zweitrangig, da (1) das Komplieren immer sehr lange dauert wegen PGO mittels Traingsdatensatz und (2) der neue Beta Compiler aus VC2010 (noch Beta?) alle Rechenkerne beim Compilieren nutzen kann.</p>
<p>Und tatsächlich, du hast vollkommen recht, schneller sauberer Code ist schnellerem unsauberen Code immer vorzuziehen. Daher suche ich stets den &quot;gesunden Kompromiss&quot; <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/1890246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890246</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Fri, 30 Apr 2010 05:22:36 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Fri, 30 Apr 2010 08:28:28 GMT]]></title><description><![CDATA[<p>schon ewigkeiten nicht mehr beta! <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="😃"
    /><br />
vor ca. 2 wochen war release^^<br />
msdnaa sei dank, hab ich ihn auch schon - nur war ich zu faul zum probieren - von der beta war ich das letzte mal so extrem enttäuscht..</p>
<p>es gab davor btw auch tools, womit alle kerne beim kompilieren genutzt wurden...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890309</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 30 Apr 2010 08:28:28 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Fri, 30 Apr 2010 17:02:31 GMT]]></title><description><![CDATA[<p>Tomahawk schrieb:</p>
<blockquote>
<p>Würde auch nie eine Template-Funktion einsetzten, wenn diese keine messbare Zeitersparnis bringt.</p>
</blockquote>
<p>Warum das? Abstraktionsmittel verwendet man primär zur Abstraktion und nicht zur Performancesteigerung. Nutze die Sprachfeatures, wenn sie Sinn machen.</p>
<p>Vielleicht hast du meinen Post falsch verstanden. Ich wollte keineswegs darauf hinaus, dass du Templates meiden solltest. Jedoch sollte Performance nicht das einzige Kriterium sein – ob für oder gegen ihren Einsatz. Ich selbst benutze oft Templates, da sie ein wahnsinnig mächtiges Sprachmittel sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890533</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 30 Apr 2010 17:02:31 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Fri, 30 Apr 2010 19:26:39 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>:<br />
Man kann Templates wunderbar dafür verwenden etwas auf Performance zu optimieren.<br />
Beispiel statischer polymorphismus (hatten wir erst kürzlich nen Beitrag zu dem Thema).<br />
Und ich finde das auch nicht verkehrt/schlecht/pöse.</p>
<p>Wobei ich allerdings in einem Beispiel wie diesem KEIN Template verwenden würde, da es keinen Sinn macht (weil dadurch auch nix schneller wird).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890622</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 30 Apr 2010 19:26:39 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Sat, 01 May 2010 11:34:49 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>:<br />
Man kann Templates wunderbar dafür verwenden etwas auf Performance zu optimieren.</p>
</blockquote>
<p>Ja, aber eben nicht primär. Meiner Meinung nach werden Templates hauptsächlich der Abstraktion wegen eingesetzt. Spielt natürlich auch eine Rolle, wie zeitkritisch das Projekt gerade ist, an dem man arbeitet. Je nachdem kann es schon sinnvoll sein, z.B. dynamische durch statische Polymorphie zu ersetzen, oder mit Metaprogrammierung bereits Berechnungen zur Kompilierzeit auszuführen.</p>
<p>Aber da Tomahawk in letzter Zeit mit seiner Schach-Engine stark in Richtung Premature Optimization tendiert, ist es für ihn sicher gut zu wissen, dass Templates mehr können als nur optimieren. <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/1890850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890850</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 01 May 2010 11:34:49 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Sun, 02 May 2010 07:25:52 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>:<br />
Man kann Templates wunderbar dafür verwenden etwas auf Performance zu optimieren.</p>
</blockquote>
<p>Ja, aber eben nicht primär. Meiner Meinung nach werden Templates hauptsächlich der Abstraktion wegen eingesetzt. Spielt natürlich auch eine Rolle, wie zeitkritisch das Projekt gerade ist, an dem man arbeitet. Je nachdem kann es schon sinnvoll sein, z.B. dynamische durch statische Polymorphie zu ersetzen, oder mit Metaprogrammierung bereits Berechnungen zur Kompilierzeit auszuführen.</p>
<p>Aber da Tomahawk in letzter Zeit mit seiner Schach-Engine stark in Richtung Premature Optimization tendiert, ist es für ihn sicher gut zu wissen, dass Templates mehr können als nur optimieren. <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>
</blockquote>
<p>Natürlich sind Templates nur dazu da &quot;zu optimieren&quot;. Was tut man denn mit Templates? Die Übersichtlichkeit und Wartbarkeit des Codes wird optimiert. Redundante Strukturen automatisch ersetzt oder Berechnungen zu Kompilezeit ausgeführt. Indirektionen verringert, parametrisiert, ...</p>
<p><strong>Zum Projekt Schachengine</strong></p>
<p>Premature Optimization wäre es in einem früheren Stadium gewesen. Jetzt geht es ganz klar darum</p>
<p>1. die <strong>Knotenleistung</strong> (=Performance) parallel mit<br />
2. der Selektivität der Suche,<br />
3. dem Zeitmanagement in Partien und<br />
4. dem Schachwissen (Midgame+Endgame)</p>
<p>zu optimieren. Wobei 1. der einzige deterministische Bereich ist, der keinen Trade-Off hat. 2-4 sind immer nur Kompromisse. Wird zB an 2. gearbeitet, bedeutet ist das ein Trade-Off Präzision vs. Spekulation.</p>
<p>Für die anderen Bereiche gibt es andere Foren. Für 1. kann ich mir hier ein paar Anregungen holen <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>Und ja, mir sind schon einige Prinzipien der Abstraktion klar, aber hat das auch wirklich immer einen Sinn?</p>
<p><strong>Beispiel Objekte</strong></p>
<p>Weshalb soll ich bei jedem Funktionsaufruf implizit einen this-Zeiger mitschicken oder beim Bearbeiten jeder Membervariablen eine implizite Dereferenzierung machen, wenn das ganze viel günstiger mit einem Struct und einem globalen Objekt zu realisieren ist?</p>
<p>Und dadurch wird nichts &quot;unsicherer&quot; oder &quot;weniger abstrakt&quot;, man muss eben nur sorgfältig abwägen. <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/1891185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891185</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Sun, 02 May 2010 07:25:52 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Sun, 02 May 2010 07:25:13 GMT]]></title><description><![CDATA[<p>Tomahawk schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>:<br />
Man kann Templates wunderbar dafür verwenden etwas auf Performance zu optimieren.</p>
</blockquote>
<p>Ja, aber eben nicht primär. Meiner Meinung nach werden Templates hauptsächlich der Abstraktion wegen eingesetzt. Spielt natürlich auch eine Rolle, wie zeitkritisch das Projekt gerade ist, an dem man arbeitet. Je nachdem kann es schon sinnvoll sein, z.B. dynamische durch statische Polymorphie zu ersetzen, oder mit Metaprogrammierung bereits Berechnungen zur Kompilierzeit auszuführen.</p>
<p>Aber da Tomahawk in letzter Zeit mit seiner Schach-Engine stark in Richtung Premature Optimization tendiert, ist es für ihn sicher gut zu wissen, dass Templates mehr können als nur optimieren. <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>
</blockquote>
<p>Natürlich sind Templates nur dazu da &quot;zu optimieren&quot;. Was tut man denn mit Templates? Die Übersichtlichkeit und Wartbarkeit des Codes wird optimiert. Redundante Strukturen automatisch ersetzt oder Berechnungen zu Kompilezeit ausgeführt. Indirektionen verringert, parametrisiert, ...</p>
<p>Premature Optimization wäre es in einem früheren Stadium gewesen. Jetzt geht es ganz klar darum</p>
<p>1. die <strong>Knotenleistung</strong> (=Performance) parallel mit<br />
2. der Selektivität der Suche,<br />
3. dem Zeitmanagement in Partien und<br />
4. dem Schachwissen (Midgame+Endgame)</p>
<p>zu optimieren. Wobei 1. der einzige deterministische Bereich ist, der keinen Trade-Off hat. 2-4 sind immer nur Kompromisse. Wird zB an 2. gearbeitet, bedeutet ist das ein Trade-Off Präzision vs. Spekulation.</p>
</blockquote>
<p>Du solltest aber auch berücksichtigen, dass der Return-On-Investment bei kumulativen Basement den Trade-Off deutlich präzessisiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891191</guid><dc:creator><![CDATA[Frop84]]></dc:creator><pubDate>Sun, 02 May 2010 07:25:13 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Sun, 02 May 2010 11:24:26 GMT]]></title><description><![CDATA[<p>Tomahawk schrieb:</p>
<blockquote>
<p>Natürlich sind Templates nur dazu da &quot;zu optimieren&quot;. Was tut man denn mit Templates? Die Übersichtlichkeit und Wartbarkeit des Codes wird optimiert.</p>
</blockquote>
<p>Ich habe mich auf Ausführungsgeschwindigkeit bezogen. Der Begriff &quot;Optimierung&quot; wird sehr oft in diesem Zusammenhang verwendet.</p>
<p>Tomahawk schrieb:</p>
<blockquote>
<p>Premature Optimization wäre es in einem früheren Stadium gewesen. Jetzt geht es ganz klar darum [...] zu optimieren.</p>
</blockquote>
<p>Okay, sollte kein Vorwurf sein. Beim Lesen deiner Posts habe ich zum Teil befürchtet, dass du sehr viel Zeit in Mikrooptimierungen investierst, obwohl z.B. bei Algorithmen viel mehr herausgeholt werden könnte. Aber gut, dass du auch andere Teile berücksichtigst. <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>Tomahawk schrieb:</p>
<blockquote>
<p>Und ja, mir sind schon einige Prinzipien der Abstraktion klar, aber hat das auch wirklich immer einen Sinn?</p>
</blockquote>
<p>Natürlich nicht immer. Es besteht die Gefahr des Overengineerings, was genauso schlecht ist. Nicht zuletzt ist – wie du sagst – ein persönliches Abwägen entscheidend.</p>
<p>Was man einfach vermeiden sollte, sind voreilige Schlüsse, die sich im Nachhinein negativ auswirken. Lieber einmal zu viel Zeit messen, und sich vielleicht am Anfang auf sauberes Design konzentrieren. Wenn man schönen und schnellen Code kombinieren kann, umso besser. Aber ich denke, dessen bist du dir bewusst. <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/1891279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891279</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 02 May 2010 11:24:26 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Sun, 02 May 2010 15:10:16 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>:<br />
Man kann Templates wunderbar dafür verwenden etwas auf Performance zu optimieren.</p>
</blockquote>
<p>Ja, aber eben nicht primär. Meiner Meinung nach werden Templates hauptsächlich der Abstraktion wegen eingesetzt.</p>
</blockquote>
<p>Ich sehe das etwas anders. Templates werden oft dafür eingesetzt etwas schöner umsetzen zu können, etwas zu vereinfachen oder zu generalisieren. Das stimmt schon.<br />
Templates werden nach meiner Erfahrung aber genauso oft eingesetzt um etwas auf Performance zu optimieren.</p>
<p>Zu sagen der &quot;primäre Zweck&quot; von Templates sei immer das eine aber nicht das andere halte ich für falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891362</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 02 May 2010 15:10:16 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Sun, 02 May 2010 16:11:29 GMT]]></title><description><![CDATA[<p>Über sowas denkst Du für die Optimierung eine Schach(!) Engine nach? Ich programmiere Simulationssoftware die für eine Rechnung wochenlang auf sehr teuren Workstations läuft. Ich würde aber niemals auf die Idee kommen einen this pointer wegzuoptimieren, denn dieser optimiert meine Performance und mein Stundensatz ist immer noch deutlich höher als der der Maschinen.<br />
Ich musste auch oft enttäuscht feststellen, dass ein moderner Compiler die tolle Optimierung, an der ich ein paar Stunden gearbeitet habe sowieso macht und das Programm nachher genauso schnell lief wie vorher. Nur der Code ist deutlich schlechter geworden und es hat sinnlos Zeit gekostet.</p>
<p>Zur Eingagsfrage tippe ich auf exakt das gleiche Ergebnis.</p>
<p>MSVC9 konnte auch schon mehrere Dateien parallel compilieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891389</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sun, 02 May 2010 16:11:29 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Sun, 02 May 2010 20:25:14 GMT]]></title><description><![CDATA[<p>damit ihr nicht mehr soviel zeit verschwendet.<br />
<a href="http://de.wikipedia.org/wiki/Profiler_%28Programmierung%29" rel="nofollow">http://de.wikipedia.org/wiki/Profiler_(Programmierung)</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891506</guid><dc:creator><![CDATA[eyjajei]]></dc:creator><pubDate>Sun, 02 May 2010 20:25:14 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktionen versus Inline Funktionen on Wed, 05 May 2010 06:54:18 GMT]]></title><description><![CDATA[<p>brotbernd schrieb:</p>
<blockquote>
<p>Über sowas denkst Du für die Optimierung eine Schach(!) Engine nach? Ich programmiere Simulationssoftware die für eine Rechnung wochenlang auf sehr teuren Workstations läuft. Ich würde aber niemals auf die Idee kommen einen this pointer wegzuoptimieren, ...</p>
</blockquote>
<p>Ist etwas Wahres dran, THX. <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/1892561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892561</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Wed, 05 May 2010 06:54:18 GMT</pubDate></item></channel></rss>