<?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[Satt eines asserts einen Compilerfehler erzeugen...]]></title><description><![CDATA[<p>Ich habe eine kleine Vector-Klasse (im math. Sinne) geschrieben und möchte dass diese eine variable Länge haben kann.<br />
Leider Ergibt dass bei einigen Operatoren Probleme, die ich bisher mit asserts löse. Z.B. so:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
bool operator == (const Vector&lt;T&gt; &amp;vector_a, const Vector&lt;T&gt; &amp;vector_b) {
	assert(vector_a.m_vData.size() == vector_b.m_vData.size() );

	for(unsigned int i = 0; i &lt; vector_a.m_vData.size(); i++) {
		if(	vector_a.m_vData[i] != vector_b.m_vData[i]) {
			return false;
		}
	}
	return true;
}
</code></pre>
<p>Nun würde ich aber lieber auf diese blöden asserts verzichten und stattdessen schon zur Compilerzeit prüfen wie groß der jeweilige Vektor ist und falls die Inkompatibel sind, soll abgebrochen werden. Weis jemand wie man das besten mit GCC bewerkstelligen kann und evtl eine Beispiel geben.</p>
<p>Mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/234007/satt-eines-asserts-einen-compilerfehler-erzeugen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 14:24:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/234007.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 Feb 2009 20:44:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Satt eines asserts einen Compilerfehler erzeugen... on Wed, 11 Feb 2009 20:44:47 GMT]]></title><description><![CDATA[<p>Ich habe eine kleine Vector-Klasse (im math. Sinne) geschrieben und möchte dass diese eine variable Länge haben kann.<br />
Leider Ergibt dass bei einigen Operatoren Probleme, die ich bisher mit asserts löse. Z.B. so:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
bool operator == (const Vector&lt;T&gt; &amp;vector_a, const Vector&lt;T&gt; &amp;vector_b) {
	assert(vector_a.m_vData.size() == vector_b.m_vData.size() );

	for(unsigned int i = 0; i &lt; vector_a.m_vData.size(); i++) {
		if(	vector_a.m_vData[i] != vector_b.m_vData[i]) {
			return false;
		}
	}
	return true;
}
</code></pre>
<p>Nun würde ich aber lieber auf diese blöden asserts verzichten und stattdessen schon zur Compilerzeit prüfen wie groß der jeweilige Vektor ist und falls die Inkompatibel sind, soll abgebrochen werden. Weis jemand wie man das besten mit GCC bewerkstelligen kann und evtl eine Beispiel geben.</p>
<p>Mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662135</guid><dc:creator><![CDATA[gentoo]]></dc:creator><pubDate>Wed, 11 Feb 2009 20:44:47 GMT</pubDate></item><item><title><![CDATA[Reply to Satt eines asserts einen Compilerfehler erzeugen... on Wed, 11 Feb 2009 20:51:12 GMT]]></title><description><![CDATA[<p>Woher soll denn der Compiler wissen, wie groß die Vektoren mal werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662141</guid><dc:creator><![CDATA[feigling]]></dc:creator><pubDate>Wed, 11 Feb 2009 20:51:12 GMT</pubDate></item><item><title><![CDATA[Reply to Satt eines asserts einen Compilerfehler erzeugen... on Wed, 11 Feb 2009 20:52:13 GMT]]></title><description><![CDATA[<p>dazu müßte aber die größe im typ stecken, denke ich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662145</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 11 Feb 2009 20:52:13 GMT</pubDate></item><item><title><![CDATA[Reply to Satt eines asserts einen Compilerfehler erzeugen... on Wed, 11 Feb 2009 21:04:54 GMT]]></title><description><![CDATA[<p>Bei variabler Länge geht das natürlich nicht...</p>
<p>Ansonsten kannst du für die Grösse einen weiteren Templateparameter angeben. Dann kannst du beispielsweise mit <code>BOOST_STATIC_ASSERT</code> zur Compilierzeit prüfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662155</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 11 Feb 2009 21:04:54 GMT</pubDate></item><item><title><![CDATA[Reply to Satt eines asserts einen Compilerfehler erzeugen... on Wed, 11 Feb 2009 21:15:27 GMT]]></title><description><![CDATA[<p>Wie kann ich denn für die Größe einen template-parameter mitgeben? Bisher habe ich die Größe über den Konstruktor übergeben. Aber ich dachte in die templates kann man nur Typdefinitionen oder halt Typen übergeben. für die Größe müsste ich doch eine statische Variable übergeben?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662160</guid><dc:creator><![CDATA[gentoo]]></dc:creator><pubDate>Wed, 11 Feb 2009 21:15:27 GMT</pubDate></item><item><title><![CDATA[Reply to Satt eines asserts einen Compilerfehler erzeugen... on Wed, 11 Feb 2009 21:16:49 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Bei variabler Länge geht das natürlich nicht...</p>
<p>Ansonsten kannst du für die Grösse einen weiteren Templateparameter angeben. Dann kannst du beispielsweise mit <code>BOOST_STATIC_ASSERT</code> zur Compilierzeit prüfen.</p>
</blockquote>
<p>ich führe deine gedanken fort und optimiere ein wenig:</p>
<pre><code class="language-cpp">template &lt;class T,size_t SA,size_t SB&gt; 
bool operator == (const Vector&lt;T,SA&gt; &amp;vector_a, const Vector&lt;T,SB&gt; &amp;vector_b){
   static_assert(SA==SB,&quot;geht nicht&quot;);
   ...
</code></pre>
<p>und dann</p>
<pre><code class="language-cpp">template &lt;class T,size_t SA,size_t SB&gt; 
bool operator == (const Vector&lt;T,S&gt; &amp;vector_a, const Vector&lt;T,S&gt; &amp;vector_b){
   static_assert(S==S,&quot;geht nicht&quot;);//rem kann vermutlich weg
   ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1662161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662161</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 11 Feb 2009 21:16:49 GMT</pubDate></item><item><title><![CDATA[Reply to Satt eines asserts einen Compilerfehler erzeugen... on Wed, 11 Feb 2009 21:30:20 GMT]]></title><description><![CDATA[<p>gentoo schrieb:</p>
<blockquote>
<p>Wie kann ich denn für die Größe einen template-parameter mitgeben?</p>
</blockquote>
<p>Man kann nicht nur Typen als Templateparameter haben.</p>
<pre><code class="language-cpp">template &lt;typename T, unsigned int N&gt;
class Vector
{
    // ...
};

Vector&lt;float, 3&gt; Vec;
</code></pre>
<p>Und volkard, wieso nicht gleich so?</p>
<pre><code class="language-cpp">template &lt;typename T, unsigned int N&gt;
bool operator== (const Vector&lt;T, N&gt;&amp; Left, const Vector&lt;T, N&gt;&amp; Right)
{
    // ...
}
</code></pre>
<p><code>static_assert</code> hätte zwar den Vorteil einer besseren Fehlermeldung, aber momentan ist das ja nicht wirklich ein Thema.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662167</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 11 Feb 2009 21:30:20 GMT</pubDate></item><item><title><![CDATA[Reply to Satt eines asserts einen Compilerfehler erzeugen... on Wed, 11 Feb 2009 21:45:11 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Und volkard, wieso nicht gleich so?</p>
<pre><code class="language-cpp">template &lt;typename T, unsigned int N&gt;
bool operator== (const Vector&lt;T, N&gt;&amp; Left, const Vector&lt;T, N&gt;&amp; Right)
</code></pre>
</blockquote>
<p>hab ich doch gemeint. in der ersten zeile hab ich nur das A und B zu löschen vergessen. in der zeile drunter isses schon weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662171</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 11 Feb 2009 21:45:11 GMT</pubDate></item><item><title><![CDATA[Reply to Satt eines asserts einen Compilerfehler erzeugen... on Thu, 12 Feb 2009 09:36:02 GMT]]></title><description><![CDATA[<p>Ich wuerde dir die Lektuere <a href="http://erdani.org/" rel="nofollow">Moder C++ Design</a> von Andrei Alexandrescu empfehlen. Da wird auch gezeigt, wie man sich ein einfaches static_assert Template bastelt (man muss nicht fuer alles Boost verwenden). Und das schon im Vorwort! Vielleicht git es das als Leseprobe irgendwo. Der Rest des Buches ist aber auf einem sehr hohem Niveau, und ungeeignet fuer Anfaenger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662319</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 12 Feb 2009 09:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to Satt eines asserts einen Compilerfehler erzeugen... on Thu, 12 Feb 2009 12:04:40 GMT]]></title><description><![CDATA[<p>Möglichkeiten gibt es da ja viele, beispielsweise Arrays mit negativen Indices, eine ausgelassene Templatespezialisierung. Beides recht trivial zu verwirklichen, da muß er nicht gleich den Alexandrescu lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662429</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Thu, 12 Feb 2009 12:04:40 GMT</pubDate></item><item><title><![CDATA[Reply to Satt eines asserts einen Compilerfehler erzeugen... on Thu, 12 Feb 2009 12:15:51 GMT]]></title><description><![CDATA[<p>audacia schrieb:</p>
<blockquote>
<p>Möglichkeiten gibt es da ja viele, beispielsweise Arrays mit negativen Indices, eine ausgelassene Templatespezialisierung. Beides recht trivial zu verwirklichen, da muß er nicht gleich den Alexandrescu lesen.</p>
</blockquote>
<p>Aber vielleicht das Vorwort :-).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662434</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 12 Feb 2009 12:15:51 GMT</pubDate></item><item><title><![CDATA[Reply to Satt eines asserts einen Compilerfehler erzeugen... on Thu, 12 Feb 2009 12:52:53 GMT]]></title><description><![CDATA[<p>audacia schrieb:</p>
<blockquote>
<p>Beides recht trivial zu verwirklichen,</p>
</blockquote>
<p>Und beides recht unschön zu verstehen, wenn da irgendwelche obskuren Compilerfehler stehen.<br />
Man muss außerdem den Alexandrescu nicht lesen und verstehen um sich die <a href="http://loki-lib.sourceforge.net/index.php?n=Main.HomePage" rel="nofollow">Loki-Bibliothek</a> runterladen zu können <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>
<p>Direkt der Code für static_check:<br />
<a href="http://loki-lib.sourceforge.net/html/a00676.html" rel="nofollow">http://loki-lib.sourceforge.net/html/a00676.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662462</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 12 Feb 2009 12:52:53 GMT</pubDate></item><item><title><![CDATA[Reply to Satt eines asserts einen Compilerfehler erzeugen... on Thu, 12 Feb 2009 14:18:10 GMT]]></title><description><![CDATA[<p>Ja, aber das ist schon die fortgeschrittene Version von static_assert, dass eine &quot;lesbare&quot; Fehlermeldung produziert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662543</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 12 Feb 2009 14:18:10 GMT</pubDate></item><item><title><![CDATA[Reply to Satt eines asserts einen Compilerfehler erzeugen... on Thu, 12 Feb 2009 14:28:29 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Ja, aber das ist schon die fortgeschrittene Version von static_assert, dass eine &quot;lesbare&quot; Fehlermeldung produziert.</p>
</blockquote>
<p>Ja. Und? Was spricht dagegen eine ausgereifte Version zu benutzen?<br />
Ich benutz doch auch die &quot;fortgeschrittene&quot; Version einer Liste, nämlich std::list&lt;&gt;, mit Iteratoren und allem und beharre nicht auf der list die ich irgendwann in den ersten Wochen meiner C++-Karriere mal in den Editor gehackt habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662557</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 12 Feb 2009 14:28:29 GMT</pubDate></item><item><title><![CDATA[Reply to Satt eines asserts einen Compilerfehler erzeugen... on Thu, 12 Feb 2009 14:35:09 GMT]]></title><description><![CDATA[<p>VIelleicht ist er eher noch Anfaenger in Templateprogrammierung und will wissen, wie sowas funktioniert. Da ist die Version im Vorwort von dem Buch schon erleuchtender.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662563</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 12 Feb 2009 14:35:09 GMT</pubDate></item></channel></rss>