<?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[Variadic Function ohne Parameteranzahl]]></title><description><![CDATA[<p>Hallo,<br />
der Titel verrät ja eigentlich schon ziemlich genau, was ich suche.<br />
Gibt es die Möglichkeit, Funktionen mit variabler Parameteranzahl zu nutzen ohne die Anzahl dieser zu kennen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289486/variadic-function-ohne-parameteranzahl</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 16:48:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289486.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Jul 2011 21:17:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Tue, 05 Jul 2011 21:17:53 GMT]]></title><description><![CDATA[<p>Hallo,<br />
der Titel verrät ja eigentlich schon ziemlich genau, was ich suche.<br />
Gibt es die Möglichkeit, Funktionen mit variabler Parameteranzahl zu nutzen ohne die Anzahl dieser zu kennen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089305</guid><dc:creator><![CDATA[Wurstinator]]></dc:creator><pubDate>Tue, 05 Jul 2011 21:17:53 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Tue, 05 Jul 2011 21:24:21 GMT]]></title><description><![CDATA[<p>Ja. Variadic Templates mit C++0x (oder Ellipse, von der ich stark abrate). In vielen Fällen kannst du aber eine Alternative benutzen, um das Gleiche zu erreichen. Z.B. Container oder verkettete Operatoren wie <code>&lt;&lt;</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089308</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 05 Jul 2011 21:24:21 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Wed, 06 Jul 2011 07:20:15 GMT]]></title><description><![CDATA[<p>Wurstinator schrieb:</p>
<blockquote>
<p>Hallo,<br />
der Titel verrät ja eigentlich schon ziemlich genau, was ich suche.<br />
Gibt es die Möglichkeit, Funktionen mit variabler Parameteranzahl zu nutzen ohne die Anzahl dieser zu kennen?</p>
</blockquote>
<p>Ja, die Möglichkeit gibt es. Ist aber vielleicht nicht das was du suchst. Verrate uns lieber <em>was</em> du erreichen willst, statt nach der Methode zu fragen <em>wie</em> du es erreichen zu können glaubst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089368</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 06 Jul 2011 07:20:15 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Wed, 06 Jul 2011 11:56:05 GMT]]></title><description><![CDATA[<p>@ Nexus: Ich weigere mich aber, C++0x zu nutzen, bis es der Standard ist <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>@ pumuckl: Eine Vektor-Klasse mit beliebig vielen Dimensionen. Die soll dann z.B. Vector&lt;3&gt; heißen. Beim Konstruktor soll man minimal 0 und maximal so viele Parameter angeben, wie es Dimensionen gibt. Der Rest wird dann mit einem Standardwert (z.B. 0) initialisiert.</p>
<pre><code class="language-cpp">Vector&lt;3&gt; v(1.0, 2.0); // &lt;- soll klappen
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2089490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089490</guid><dc:creator><![CDATA[Wurstinator]]></dc:creator><pubDate>Wed, 06 Jul 2011 11:56:05 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Wed, 06 Jul 2011 11:59:59 GMT]]></title><description><![CDATA[<p>Varidatisch Parameter gibt es auch aber die sind nicht typsicher...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089494</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 06 Jul 2011 11:59:59 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Wed, 06 Jul 2011 12:22:02 GMT]]></title><description><![CDATA[<p>Wurstinator schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Vector&lt;3&gt; v(1.0, 2.0); // &lt;- soll klappen
</code></pre>
</blockquote>
<p>Es ist zwar nicht ganz das von dir gewünschte, aber hast du dir mal <a href="http://www.boost.org/doc/libs/1_46_1/libs/assign/doc/index.html" rel="nofollow">Boost-Assignment</a> angeschaut?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089509</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 06 Jul 2011 12:22:02 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Wed, 06 Jul 2011 13:28:12 GMT]]></title><description><![CDATA[<p>Wurstinator schrieb:</p>
<blockquote>
<p>@ pumuckl: Eine Vektor-Klasse mit beliebig vielen Dimensionen.</p>
</blockquote>
<p>Meinst du Dimensionen oder Elemente? Nur dass wir von Gleichen reden. Ein vector mit 3 Dimensionen hätte z.B. 3 Längen/Ausdehnungen, also z.B. 8x14x22 Elemente. Ein vector mit 3 Elementen hat eben 3 Elemente. Das was du da skizzierst sieht eher nach letzterem aus, zumindest verstehe ich sonst den Konstruktoraufruf nicht.</p>
<p>Da du Vector&lt;3&gt; schreibst, also ein Template, nehme ich an, dass du die Größe (d.h. die Anzahl der Elemente) zur Compilezeit festnageln möchtest. Das spräche dann für std::array (C++0x-Standardbibliothek) bzw. std::tr1::array (C++ TR1) bzw. boost::array.<br />
Das Ganze gewürzt mit boost::assign oder ggf. initializer-Listen in C++0x</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089536</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 06 Jul 2011 13:28:12 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Wed, 06 Jul 2011 17:21:49 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Ein vector mit 3 Dimensionen hätte z.B. 3 Längen/Ausdehnungen, also z.B. 8x14x22 Elemente.</p>
</blockquote>
<p>Ein dreidimensionaler Vektor ist für mich (x,y,z), also ein Vektor mit drei Komponenten. Die Dimension des Vektorraums ist 3. Zumindest falls wir von mathematischen Vektoren sprechen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089638</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 06 Jul 2011 17:21:49 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Wed, 06 Jul 2011 17:34:03 GMT]]></title><description><![CDATA[<p>Ja, ich meinte mathematische Vektoren.</p>
<p>@ asc: Ich werds mir mal ansehen, danke.<br />
edit: Entweder hab ich das falsch verstanden oder du hast mich (auch) falsch verstanden und dachtest, ich meine Vektoren-Listen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089645</guid><dc:creator><![CDATA[Wurstinator]]></dc:creator><pubDate>Wed, 06 Jul 2011 17:34:03 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Wed, 06 Jul 2011 17:43:14 GMT]]></title><description><![CDATA[<p>Boost.Assign verwendet im Prinzip folgende Technik:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;

template &lt;unsigned int N&gt;
struct Vector
{
	int values[N];

	Vector&lt;N+1&gt; operator() (int value) const
	{
		Vector&lt;N+1&gt; v;
		std::copy(values, values+N, v.values);
		v.values[N] = value;
		return v;
	}
};

Vector&lt;1&gt; MakeVector(int value)
{
	Vector&lt;1&gt; v;
	v.values[0] = value;
	return v;
}

int main()
{
	Vector&lt;4&gt; x = MakeVector(4)(5)(7)(8);
}
</code></pre>
<p>Hier kopierst du natürlich unnötig viel. Kapselung ist auch nicht optimal, da man auf einem fertigen Vektor-Objekt immer noch <code>operator()</code> aufrufen kann. Aber das Grundprinzip sollte verständlich werden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089648</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 06 Jul 2011 17:43:14 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Wed, 06 Jul 2011 20:42:17 GMT]]></title><description><![CDATA[<p>Aber wenn ich das richtig verstehe, wird am Ende doch ein Vektor&lt;N&gt; zurückgegeben, wobei N die Anzahl der Parameter ist.</p>
<pre><code class="language-cpp">Vector&lt;5&gt; x = MakeVector(4)(5)(7)(8); // Fehler?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2089718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089718</guid><dc:creator><![CDATA[Wurstinator]]></dc:creator><pubDate>Wed, 06 Jul 2011 20:42:17 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Wed, 06 Jul 2011 20:50:18 GMT]]></title><description><![CDATA[<p>Ja, sollte einen Fehler ergeben weil ein <code>Vector&lt;5&gt;</code> ein komplett anderer Typ ist als <code>Vector&lt;4&gt;</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089722</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 06 Jul 2011 20:50:18 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Thu, 07 Jul 2011 20:17:19 GMT]]></title><description><![CDATA[<p>Das meinte ich ja.<br />
Somit löst das eben genau <strong>nicht</strong> das, was ich erreichen will <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/2090082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2090082</guid><dc:creator><![CDATA[Wurstinator]]></dc:creator><pubDate>Thu, 07 Jul 2011 20:17:19 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Thu, 07 Jul 2011 20:18:18 GMT]]></title><description><![CDATA[<p>Man kann aber mit einem impliziten Konvertierungsoperator das Verhalten verändern...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2090083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2090083</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 07 Jul 2011 20:18:18 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Thu, 07 Jul 2011 20:20:45 GMT]]></title><description><![CDATA[<p>Wurstinator schrieb:</p>
<blockquote>
<p>Das meinte ich ja.<br />
Somit löst das eben genau <strong>nicht</strong> das, was ich erreichen will</p>
</blockquote>
<p>Ich sagte ja, das Codebeispiel solle nur das Prinzip verdeutlichen. Wenn du rumbastelst, kannst du das beliebig konfigurieren und optimieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2090084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2090084</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 07 Jul 2011 20:20:45 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Thu, 07 Jul 2011 21:50:44 GMT]]></title><description><![CDATA[<p>Wie verwende ich denn implizite Konvertierung mit Templates?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2090134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2090134</guid><dc:creator><![CDATA[Wurstinator]]></dc:creator><pubDate>Thu, 07 Jul 2011 21:50:44 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Thu, 07 Jul 2011 22:09:50 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// Konstruktor-Definition ausserhalb der Klasse
template &lt;typename N&gt; // Templateparameter der Klasse
template &lt;typename M&gt; // Templateparameter der Funktion
Vector&lt;N&gt;::Vector(const Vector&lt;M&gt;&amp; smallerVector)
{
    static_assert(M &lt; N); // nicht &lt;=, für == ist der Kopierkonstruktor
    // ...
}
</code></pre>
<p>Aber wenn du das wirklich so durchziehen willst und Performance eine Rolle spielt, solltest du einiges optimieren. Oder gleich Boost.Assign verwenden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2090144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2090144</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 07 Jul 2011 22:09:50 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Sat, 09 Jul 2011 18:01:29 GMT]]></title><description><![CDATA[<p>Ich würde jetzt gerne, neben der variablen Dimensionsgröße, auch noch den Typ für die Werte variabel machen.<br />
Das klappt nicht:</p>
<pre><code class="language-cpp">template&lt;unsigned int DIM, class VTYPE=double&gt;
Vektor&lt;1, VTYPE&gt; Vektor::MakeVektor(VTYPE value)
{
    Vektor&lt;1, VTYPE&gt; i;
    i[0] = value;
    return i;
}
</code></pre>
<blockquote>
<p>error: 'template&lt;unsigned int DIM, class VTYPE&gt; class Vektor' used without template parameters|<br />
error: default template arguments may not be used in function templates|</p>
</blockquote>
<p>Hat da noch jemand einen Rat für mich?<br />
Ich bedanke mich aber schon für die bisherige Hilfe.</p>
<blockquote>
<p>Oder gleich Boost.Assign verwenden...</p>
</blockquote>
<p>Ich dachte, Boost.Assign ist für Listen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2090719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2090719</guid><dc:creator><![CDATA[Wurstinator]]></dc:creator><pubDate>Sat, 09 Jul 2011 18:01:29 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Sat, 09 Jul 2011 18:05:36 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;unsigned int DIM, class VTYPE&gt; 
Vektor&lt;1, VTYPE&gt; Vektor&lt;DIM, VTYPE&gt;::MakeVektor(VTYPE value) //Unbekannter Typ lieber als Referenz auf const übergeben
{ 
    Vektor&lt;1, VTYPE&gt; i; 
    i[0] = value; 
    return i; 
}
</code></pre>
<p>EDIT: Wieso ist <code>MakeVektor</code> eine Methode und keine freie Funktion? Und bei der Implementierung gibt man keine Default-Parameter an (bei Funktionen sowie bei Templates).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2090720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2090720</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 09 Jul 2011 18:05:36 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Sat, 09 Jul 2011 18:17:22 GMT]]></title><description><![CDATA[<p>Ich habe schon mal so etwas hier gebaut:</p>
<pre><code class="language-cpp">template&lt;class T, int Dim&gt;
struct point
{
  T coeffs[Dim];
  T const&amp; operator[](int idx) const {return coeffs[idx];}
  T      &amp; operator[](int idx)       {return coeffs[idx];}
};

template&lt;class Iter&gt;
inline void assign(Iter) {}

template&lt;class Iter, class Arg, class...More&gt;
inline void assign(Iter ptr, Arg&amp;&amp; arg, More&amp;&amp;... more)
{
  *ptr = std::forward&lt;Arg&gt;(arg);
  ++ptr;
  assign(ptr,std::forward&lt;More&gt;(more)...);
}

template&lt;class T, class...Args&gt;
point&lt;T,sizeof...(Args)&gt; make_point(Args&amp;&amp;...args)
{
  point&lt;T,sizeof...(Args)&gt; result;
  assign(result.coeffs+0,std::forward&lt;Args&gt;(args)...);
  return result;
}

int main() {
  point&lt;int,3&gt; p = {{11,22,33}}; // Listen-Initialisierung klappt sogar in C++98
                                 // da es sich um einen Aggregat-Typen handelt.
  auto q = make_point&lt;double&gt;(1.618,2.718,3.142);
}
</code></pre>
<p>(Warnung1: Dies ist einfach so runtergetippt ohne zu testen)<br />
(Warnung2: Dies ist C++11 Code)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2090722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2090722</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 09 Jul 2011 18:17:22 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Sat, 09 Jul 2011 22:36:59 GMT]]></title><description><![CDATA[<blockquote>
<p>Wieso ist MakeVektor eine Methode und keine freie Funktion?</p>
</blockquote>
<p>Weil Funktionen keine default-Parameter bei Templates haben können.</p>
<p>@ krümelkacker: Manches davon versteh ich leider nicht und ich bin um diese Uhrzeit auch nicht mehr wild darauf, mir die ganzen Befehle zusammenzusuchen <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="🙂"
    /><br />
Aber danke, dass du mich an die const-Correctness erinnert hast. Die hab ich bei mir vergessen.</p>
<p>Also, meine Klasse ist jetzt fertig. Falls jemand Lust hat, kann er ja mal drüberlesen und mir gegebenenfalls Tipps geben.<br />
Ansonsten bedanke ich mich erneut und verziehe mich <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>
<pre><code class="language-cpp">#ifndef VEKTOR_HPP_INCLUDED
#define VEKTOR_HPP_INCLUDED

#include &lt;stdarg.h&gt;
#include &lt;string.h&gt;
#include &lt;iostream&gt;
using namespace std;

template&lt;unsigned int DIM, class VTYPE=double&gt; class Vektor;

template&lt;unsigned int DIM, class VTYPE&gt;
class Vektor
{
    template&lt;unsigned int friendDIM, class friendVTYPE&gt; friend class Vektor;
    public:
        // Constructors
        Vektor() {};
        template&lt;class any&gt; Vektor(any* x, ...);
        Vektor(VTYPE vals[]);
        template&lt;unsigned int N&gt; Vektor(const Vektor&lt;N, VTYPE&gt;&amp; other);
        // Operators
        template&lt;unsigned int N&gt; Vektor&lt;DIM, VTYPE&gt; operator=(Vektor&lt;N, VTYPE&gt; other);
        Vektor&lt;DIM, VTYPE&gt; operator=(VTYPE vals[]);
        Vektor&lt;DIM+1, VTYPE&gt; operator()(VTYPE value) const;
        VTYPE&amp; operator[](unsigned int index);
        const VTYPE&amp; operator[](unsigned int index) const;
        // static &quot;MakeVector&quot; function
        static Vektor&lt;0u, VTYPE&gt; MakeVektor();
        static Vektor&lt;1u, VTYPE&gt; MakeVektor(const VTYPE&amp; value);
    protected:
        VTYPE values[DIM];
};

template&lt;unsigned int DIM, class VTYPE&gt;
template&lt;class any&gt;
Vektor&lt;DIM, VTYPE&gt;::Vektor(any* x, ...)
{
    va_list args;
    va_start(args, x);
    for (unsigned int n = 0; n &lt; DIM; n++)
        values[n] = va_arg(args, VTYPE);
    va_end(args);
}
template&lt;unsigned int DIM, class VTYPE&gt;
Vektor&lt;DIM, VTYPE&gt;::Vektor(VTYPE vals[])
{
    memcpy(values, vals, sizeof(vals) * sizeof(VTYPE));
}

template&lt;unsigned int DIM, class VTYPE&gt;
template&lt;unsigned int N&gt;
Vektor&lt;DIM, VTYPE&gt;::Vektor(const Vektor&lt;N, VTYPE&gt;&amp; other)
{
    memcpy(values, other.values, sizeof(other.values));
}

template&lt;unsigned int DIM, class VTYPE&gt;
template&lt;unsigned int N&gt;
Vektor&lt;DIM, VTYPE&gt; Vektor&lt;DIM, VTYPE&gt;::operator=(Vektor&lt;N, VTYPE&gt; other)
{
    memcpy(values, other.values, sizeof(other.values));
    return *this;
}

template&lt;unsigned int DIM, class VTYPE&gt;
Vektor&lt;DIM, VTYPE&gt; Vektor&lt;DIM, VTYPE&gt;::operator=(VTYPE vals[])
{
    memcpy(values, vals, sizeof(vals) * sizeof(VTYPE));
    return *this;
}

template&lt;unsigned int DIM, class VTYPE&gt;
Vektor&lt;DIM+1, VTYPE&gt; Vektor&lt;DIM, VTYPE&gt;::operator()(VTYPE value) const
{
    Vektor&lt;DIM+1, VTYPE&gt; i(*this);
    i[DIM] = value;
    return i;
}

template&lt;unsigned int DIM, class VTYPE&gt;
VTYPE&amp; Vektor&lt;DIM, VTYPE&gt;::operator[](unsigned int index)
{
    return values[index];
}

template&lt;unsigned int DIM, class VTYPE&gt;
const VTYPE&amp; Vektor&lt;DIM, VTYPE&gt;::operator[](unsigned int index) const
{
    return values[index];
}

template&lt;unsigned int DIM, class VTYPE&gt;
Vektor&lt;0u, VTYPE&gt; Vektor&lt;DIM, VTYPE&gt;::MakeVektor()
{
    Vektor&lt;0u, VTYPE&gt; i;
    return i;
}

template&lt;unsigned int DIM, class VTYPE&gt;
Vektor&lt;1u, VTYPE&gt; Vektor&lt;DIM, VTYPE&gt;::MakeVektor(const VTYPE&amp; value)
{
    Vektor&lt;1u, VTYPE&gt; i;
    i[0] = value;
    return i;
}

#endif // VEKTOR_HPP_INCLUDED
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2090828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2090828</guid><dc:creator><![CDATA[Wurstinator]]></dc:creator><pubDate>Sat, 09 Jul 2011 22:36:59 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Sun, 10 Jul 2011 14:47:38 GMT]]></title><description><![CDATA[<p>Mach das Array <code>values</code> doch <code>private</code> . Klasse die von <code>Vektor</code> erben können darauf mit dem Feldoperator zugreifen. Und die beiden Zeilen 4 &amp; 5 sind nicht standardkonform.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2091000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2091000</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sun, 10 Jul 2011 14:47:38 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Sun, 10 Jul 2011 18:15:05 GMT]]></title><description><![CDATA[<blockquote>
<p>Mach das Array values doch private. Klasse die von Vektor erben können darauf mit dem Feldoperator zugreifen.</p>
</blockquote>
<p>Schon klar, aber solange ich die Daten nicht geheim halten will, kann ich sie ja auch zugänglich machen. z.B. für memcpy braucht man ja den Array direkt.</p>
<blockquote>
<p>Und die beiden Zeilen 4 &amp; 5 sind nicht standardkonform.</p>
</blockquote>
<p>Die beiden includes? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Was soll ich denn dann nehmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2091093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2091093</guid><dc:creator><![CDATA[Wurstinator]]></dc:creator><pubDate>Sun, 10 Jul 2011 18:15:05 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Sun, 10 Jul 2011 18:26:43 GMT]]></title><description><![CDATA[<p>Wurstinator schrieb:</p>
<blockquote>
<p>für memcpy braucht man ja den Array direkt.</p>
</blockquote>
<p>Das kann man auch mit einer <code>for</code> -Schleife machen.</p>
<p>Wurstinator schrieb:</p>
<blockquote>
<p>Was soll ich denn dann nehmen?</p>
</blockquote>
<pre><code class="language-cpp">#include &lt;cstdarg&gt; 
#include &lt;cstring&gt;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2091099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2091099</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sun, 10 Jul 2011 18:26:43 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Sun, 10 Jul 2011 18:27:58 GMT]]></title><description><![CDATA[<p>Wurstinator schrieb:</p>
<blockquote>
<blockquote>
<p>Und die beiden Zeilen 4 &amp; 5 sind nicht standardkonform.</p>
</blockquote>
<p>Die beiden includes? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Was soll ich denn dann nehmen?</p>
</blockquote>
<p>Die C++ Versionen davon: &lt;cstdarg&gt; und &lt;cstring&gt;.</p>
<p>Ansonsten: Deine memcpy()-Aufrufe sind (a) schon für sich fehlerhaft (sizeof(vals) liefert alleine schon die benötigte Größe des Arrays in Byte), (b) katastrophal, wenn jemand das Template mit einer eigenen Numerik-Klasse verwenden will und (c) zumindest teilweise unnötig (das Kopieren kannst du bedenkenlos den compiler-generierten Methoden überlassen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2091101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2091101</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 10 Jul 2011 18:27:58 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic Function ohne Parameteranzahl on Sun, 10 Jul 2011 19:34:38 GMT]]></title><description><![CDATA[<p>Ach Mist, ich habs verwechselt und dachte cstring/cstdarg wären die C-Header <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>@ CStoll: Bei diesem Konstruktor:</p>
<pre><code class="language-cpp">template&lt;unsigned int DIM, class VTYPE&gt;
Vektor&lt;DIM, VTYPE&gt;::Vektor(VTYPE vals[])
{
    memcpy(values, vals, sizeof(vals) * sizeof(VTYPE));
}
</code></pre>
<p>wird aber nicht richtig kopiert, wenn ich nur sizeof(vals) nehme.</p>
<p>Und zu welchen Problemen kann es mit einer eigenen Numerik-Klasse kommen? Weil der (Copy-)Konstruktor dann nicht aufgerufen wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2091121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2091121</guid><dc:creator><![CDATA[Wurstinator]]></dc:creator><pubDate>Sun, 10 Jul 2011 19:34:38 GMT</pubDate></item></channel></rss>