<?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[Funktionen mit variierender Argumentenanzahl]]></title><description><![CDATA[<p>Hey C++ler,<br />
der Titel ist mir nicht ganz so gelungen, aber ich versuche mal meine Frage zu schildern:</p>
<p>Ich möchte eine Such-Funktion schreiben, die so aussehen könnte:</p>
<pre><code class="language-cpp">void search(int z,string t,string a){...}
</code></pre>
<p>Die Funktion soll ein Objekt innerhalb eines vectors suchen. Dabei soll es dem Benutzer aber erlaubt sein weniger als 3 Agumente anzugeben. Z.b.soll er auch nur mit z und t oder z und a ein Ergebniss erhalten, ohne dass die Funktion anmerkt, dass zu wenige Argumente übergeben wurden!</p>
<p>Wie ist das zu lösen?</p>
<p>Mfg Golfi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/294763/funktionen-mit-variierender-argumentenanzahl</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 15:11:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294763.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 31 Oct 2011 23:01:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Mon, 31 Oct 2011 23:01:53 GMT]]></title><description><![CDATA[<p>Hey C++ler,<br />
der Titel ist mir nicht ganz so gelungen, aber ich versuche mal meine Frage zu schildern:</p>
<p>Ich möchte eine Such-Funktion schreiben, die so aussehen könnte:</p>
<pre><code class="language-cpp">void search(int z,string t,string a){...}
</code></pre>
<p>Die Funktion soll ein Objekt innerhalb eines vectors suchen. Dabei soll es dem Benutzer aber erlaubt sein weniger als 3 Agumente anzugeben. Z.b.soll er auch nur mit z und t oder z und a ein Ergebniss erhalten, ohne dass die Funktion anmerkt, dass zu wenige Argumente übergeben wurden!</p>
<p>Wie ist das zu lösen?</p>
<p>Mfg Golfi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138508</guid><dc:creator><![CDATA[Golfi1812]]></dc:creator><pubDate>Mon, 31 Oct 2011 23:01:53 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Mon, 31 Oct 2011 23:08:20 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void search(){ search(0,&quot;default&quot;,&quot;default&quot;);}
void search(int z){ search(z,&quot;default&quot;,&quot;default&quot;);}
void search(int z,string t){ search(z,t,&quot;default&quot;);}
void search(int z,string t,string a){...}
</code></pre>
<p>Überladung nennt sich das.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138513</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 31 Oct 2011 23:08:20 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Mon, 31 Oct 2011 23:20:46 GMT]]></title><description><![CDATA[<p>Bei drei Argumenten wären variadic functions wahrscheinlich zu viel..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138519</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Mon, 31 Oct 2011 23:20:46 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Sat, 05 Nov 2011 22:55:47 GMT]]></title><description><![CDATA[<p>So würde das dann als Code aussehen:</p>
<pre><code class="language-cpp">#include &quot;../../../std_lib_facilities.h&quot;

class Book
{
public:
	string title;
	string autor;
	int ISBN;
};

vector&lt;Book&gt;Books;
int pb;

void search()
{ 
	search(0,&quot;default&quot;,&quot;default&quot;);
} 

void search(int ISBN)
{ 
	search(ISBN,&quot;default&quot;,&quot;default&quot;);
}

void search(int ISBN,string title)
{ 
	search(ISBN,title,&quot;default&quot;);
} 

void search(int ISBN,string title,string autor)
{
	for(int i = 0;i&lt;Books.size();++i)
	{
		if(ISBN == Books[i].ISBN &amp;&amp; title == Books[i].title &amp;&amp; autor == Books[i].autor)//Wenn alle Daten übereinstimmen
		{
			pb = i;
	    }
	}
}

int main()
{
	Book h;
	Book Test;
	Test.title = &quot;Test&quot;;
	Test.autor = &quot;Nick&quot;;
	Test.ISBN = 1234;
	Books.push_back(h);
	Books.push_back(Test);
	int ISBN = 1234;
	search();
	cout&lt;&lt;pb;
	keep_window_open();
}
</code></pre>
<p>Was ich nicht versteht, woher bekommen die search_funktionen denn die Argumente nach denen sie suchen sollen. Wenn ich z.b. nach der ISBN suchen möchte, muss ich dann search(ISBN) machen? Aber woher bekommt die search den integer ?muss der global sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140905</guid><dc:creator><![CDATA[Golfi1812]]></dc:creator><pubDate>Sat, 05 Nov 2011 22:55:47 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Sat, 05 Nov 2011 22:59:14 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void search(){ search(0,&quot;default&quot;,&quot;default&quot;);}
void search(int z){ search(z,&quot;default&quot;,&quot;default&quot;);}
void search(int z,string t){ search(z,t,&quot;default&quot;);}
void search(int z,string t,string a){...}
</code></pre>
<p>Überladung nennt sich das.</p>
</blockquote>
<pre><code class="language-cpp">void search(int z = 0, string t = &quot;default&quot;, string a = &quot;default&quot;) {...}
</code></pre>
<p>Default-Parameter nennt sich das. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140909</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 05 Nov 2011 22:59:14 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Sat, 05 Nov 2011 23:17:29 GMT]]></title><description><![CDATA[<p>Ich stehe garde total aufm schlauch.<br />
Kann mir jemand bitte einen kurzen Bsp Code posten in dem man per cin einen Wert<br />
(sting oder integer) eingibt und dann mittels dieses Wertes nach übereinstimmungen mit einem vector inhalt gesucht wird. Wenn einer gefunden wurde, soll die &quot;Platznummer&quot; des Objekts im vector ausgegeben werden soll.</p>
<p>Die Objekte in dem vector sollen Objekte mit folgendem Typ sein:</p>
<pre><code class="language-cpp">class Test
{
public:
int z;
stirng a;
string b;
}
</code></pre>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140916</guid><dc:creator><![CDATA[Golfi1812]]></dc:creator><pubDate>Sat, 05 Nov 2011 23:17:29 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Sun, 06 Nov 2011 02:20:21 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct Test
{
	int a;
	string b;
	string c;
};

bool operator==(const Test&amp; rhs, const Test&amp; lhs)
{
	return (rhs.a == lhs.a) &amp;&amp; (rhs.b == lhs.b) &amp;&amp; (rhs.c == lhs.c);
}

bool operator!=(const Test&amp; rhs, const Test&amp; lhs)
{
	return !(rhs == lhs);
}

int main()
{
	// Vektor erstellen
	Test arr[] = { {1, &quot;Wurst&quot;, &quot;Kaese&quot;} , {4, &quot;Banane&quot;, &quot;Brot&quot;} , {9000, &quot;Vegetarier&quot;, &quot;Karotte&quot;} };
	vector&lt;Test&gt; vec(arr, arr + sizeof(arr) / sizeof(Test));
	// Einlesen
	Test temp;
	cin &gt;&gt; temp.a &gt;&gt; temp.b &gt;&gt; temp.c;
	cout &lt;&lt; endl;
	// Iterator finden
	vector&lt;Test&gt;::iterator iter = find(vec.begin(), vec.end(), temp);
	// Ausgabe
	if (iter == vec.end())
		cout &lt;&lt; &quot;Element nicht gefunden.&quot; &lt;&lt; endl;
	else
	{
		vector&lt;Test&gt;::size_type pos = iter - vec.begin();
		cout &lt;&lt; &quot;Element an Position &quot; &lt;&lt; pos &lt;&lt; &quot; gefunden.&quot; &lt;&lt; endl;
	}
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2140936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140936</guid><dc:creator><![CDATA[Wurstinator]]></dc:creator><pubDate>Sun, 06 Nov 2011 02:20:21 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Sun, 06 Nov 2011 06:38:32 GMT]]></title><description><![CDATA[<p>Hi, vieleicht kannst du dir hiermit ja etwas brauchbares basteln.</p>
<pre><code class="language-cpp">void search(int count, ...)
{
    va_list l;
    va_start(l, count);
    for (int i = 0; i &lt; count; ++i)
    {
        char *str = va_arg(l, char*);
        std::cout &lt;&lt; &quot;Str &quot; &lt;&lt; i &lt;&lt; &quot; : &quot; &lt;&lt; str &lt;&lt; std::endl;
    }
    va_end(l);
}
</code></pre>
<pre><code class="language-cpp">search(3, &quot;Test&quot;, &quot;TdA&quot;, &quot;OJ&quot;);
search(2, &quot;Test2&quot;, &quot;TdAasd&quot;);
</code></pre>
<p>Gruß, Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140944</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 06 Nov 2011 06:38:32 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Sun, 06 Nov 2011 07:09:57 GMT]]></title><description><![CDATA[<p>Lest mal seinen Code und überlegt mal, anstatt Müll zu antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140946</guid><dc:creator><![CDATA[muhaha]]></dc:creator><pubDate>Sun, 06 Nov 2011 07:09:57 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Sun, 06 Nov 2011 10:05:10 GMT]]></title><description><![CDATA[<p>Das problem ist doch das der Compiler nicht erkennen kann ob der übergebene String jetzt für a oder für t übergeben wird.Die Funktion wäre nicht eindeutig da t und a beides Strings sind.</p>
<p>Meiner Meinung kann man das nur lösen indem man den Funktionnamen ändern und es so schreibt</p>
<pre><code class="language-cpp">void search_t(int z, string t) {search(z, t, &quot;Default für a&quot;);}
void search_a(int z, string a) {search(z, &quot;Default für t&quot;, a);}
void search(int z) {search(z, &quot;Default für t&quot;, &quot;Default für a&quot;);}
void search(int z,string t,string a){...}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2140971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140971</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 06 Nov 2011 10:05:10 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Sun, 06 Nov 2011 11:45:26 GMT]]></title><description><![CDATA[<p>Daniel_S schrieb:</p>
<blockquote>
<p>Das problem ist doch das der Compiler nicht erkennen kann ob der übergebene String jetzt für a oder für t übergeben wird.Die Funktion wäre nicht eindeutig da t und a beides Strings sind.</p>
<p>Meiner Meinung kann man das nur lösen indem man den Funktionnamen ändern und es so schreibt</p>
<pre><code class="language-cpp">void search_t(int z, string t) {search(z, t, &quot;Default für a&quot;);}
void search_a(int z, string a) {search(z, &quot;Default für t&quot;, a);}
void search(int z) {search(z, &quot;Default für t&quot;, &quot;Default für a&quot;);}
void search(int z,string t,string a){...}
</code></pre>
</blockquote>
<p>Falsch. Ich empfehle dir das Buch &quot;Effektiv C++ programmieren&quot; von Scott Meyers.<br />
Scott erklärt in diesem Buch, dass man dafür Enums (für eine abzählbare Menge von Eingabewerten, etwa Wochentage) oder eigene Typen dafür verwendet.</p>
<p>also etwa sowas:</p>
<pre><code class="language-cpp">class Autor {
  string name;
  bool is_set;
  Autor(const char * name) : name(name), bool(name) {}
  bool isset() const { return is_set; }
  const string&amp; name() const { return name; }
};

class Titel{
//... analog zu Autor
};

class ISBN{
//...
};

entry_type suche(ISBN i, Autor a, Titel t);

int main() {
  entry_type result = suche(ISBN(0), Autor(&quot;Scott Meyers&quot;), Titel(0));

  std::cout &lt;&lt; result &lt;&lt; std::endl;

}
</code></pre>
<p>Sowas in etwa. Die C-String sind zwar nicht schön, aber man kriegt über den Nullzeiger die Optionalität geschenkt - string* sollte auch gehen, ist aber umständlicher in der Benutzung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2141025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2141025</guid><dc:creator><![CDATA[bmario_]]></dc:creator><pubDate>Sun, 06 Nov 2011 11:45:26 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Sun, 06 Nov 2011 12:17:02 GMT]]></title><description><![CDATA[<p>bmario_ schrieb:</p>
<blockquote>
<p>Daniel_S schrieb:</p>
<blockquote>
<p>Das problem ist doch das der Compiler nicht erkennen kann ob der übergebene String jetzt für a oder für t übergeben wird.Die Funktion wäre nicht eindeutig da t und a beides Strings sind.</p>
<p>Meiner Meinung kann man das nur lösen indem man den Funktionnamen ändern und es so schreibt</p>
<pre><code class="language-cpp">void search_t(int z, string t) {search(z, t, &quot;Default für a&quot;);}
void search_a(int z, string a) {search(z, &quot;Default für t&quot;, a);}
void search(int z) {search(z, &quot;Default für t&quot;, &quot;Default für a&quot;);}
void search(int z,string t,string a){...}
</code></pre>
</blockquote>
<p>Falsch. Ich empfehle dir das Buch &quot;Effektiv C++ programmieren&quot; von Scott Meyers.<br />
Scott erklärt in diesem Buch, dass man dafür Enums (für eine abzählbare Menge von Eingabewerten, etwa Wochentage) oder eigene Typen dafür verwendet.</p>
<p>also etwa sowas:</p>
<pre><code class="language-cpp">class Autor {
  string name;
  bool is_set;
  Autor(const char * name) : name(name), bool(name) {}
  bool isset() const { return is_set; }
  const string&amp; name() const { return name; }
};

class Titel{
//... analog zu Autor
};

class ISBN{
//...
};

entry_type suche(ISBN i, Autor a, Titel t);

int main() {
  entry_type result = suche(ISBN(0), Autor(&quot;Scott Meyers&quot;), Titel(0));

  std::cout &lt;&lt; result &lt;&lt; std::endl;

}
</code></pre>
</blockquote>
<p>Echt? Machst du eine extra Klasse für Name, Vorname, Straße, Benutzername, Titel, Nachrichtentext, X-Koordinate, Y-Koordinate, Autoname, Schiffname usw...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2141038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2141038</guid><dc:creator><![CDATA[wooooaoaw]]></dc:creator><pubDate>Sun, 06 Nov 2011 12:17:02 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Sun, 06 Nov 2011 12:28:58 GMT]]></title><description><![CDATA[<p>wooooaoaw schrieb:</p>
<blockquote>
<p>Echt? Machst du eine extra Klasse für Name, Vorname, Straße, Benutzername, Titel, Nachrichtentext, X-Koordinate, Y-Koordinate, Autoname, Schiffname usw...</p>
</blockquote>
<p>Finde ich auch übertrieben. Man könnte es sich für spezielle Formate wie ISBN-Nummer überlegen, aber für die meisten Eigenschaften würde ich <code>std::string</code> nehmen.</p>
<p>Die Alternative eine Klasse mit allen Eigenschaften.</p>
<pre><code class="language-cpp">struct Buch
{
    Buch(); // setzt Default-Werte

    std::string Titel;
    std::string Autor;
    ...
};

int main()
{
    Buch b;
    b.Titel = &quot;Effective C++&quot;;
    b.Autor = &quot;Scott Meyers&quot;;

    Suche(b);
}
</code></pre>
<p>Natürlich kann man hier noch stundenlang rumwerkeln und z.B. mit Set/Get kapseln, Named Constructor Idiom für schnelle temporäre Objekte anwenden oder sogar mehrere Argumentreihenfolgen erlauben. Aber ich bezweifle, dass sich der Aufwand lohnt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2141041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2141041</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 06 Nov 2011 12:28:58 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Sun, 06 Nov 2011 13:32:07 GMT]]></title><description><![CDATA[<p>wooooaoaw schrieb:</p>
<blockquote>
<p>bmario_ schrieb:</p>
<blockquote>
<p>Daniel_S schrieb:</p>
<blockquote>
<p>Das problem ist doch das der Compiler nicht erkennen kann ob der übergebene String jetzt für a oder für t übergeben wird.Die Funktion wäre nicht eindeutig da t und a beides Strings sind.</p>
<p>Meiner Meinung kann man das nur lösen indem man den Funktionnamen ändern und es so schreibt</p>
<pre><code class="language-cpp">void search_t(int z, string t) {search(z, t, &quot;Default für a&quot;);}
void search_a(int z, string a) {search(z, &quot;Default für t&quot;, a);}
void search(int z) {search(z, &quot;Default für t&quot;, &quot;Default für a&quot;);}
void search(int z,string t,string a){...}
</code></pre>
</blockquote>
<p>Falsch. Ich empfehle dir das Buch &quot;Effektiv C++ programmieren&quot; von Scott Meyers.<br />
Scott erklärt in diesem Buch, dass man dafür Enums (für eine abzählbare Menge von Eingabewerten, etwa Wochentage) oder eigene Typen dafür verwendet.</p>
<p>also etwa sowas:</p>
<pre><code class="language-cpp">class Autor {
  string name;
  bool is_set;
  Autor(const char * name) : name(name), bool(name) {}
  bool isset() const { return is_set; }
  const string&amp; name() const { return name; }
};

class Titel{
//... analog zu Autor
};

class ISBN{
//...
};

entry_type suche(ISBN i, Autor a, Titel t);

int main() {
  entry_type result = suche(ISBN(0), Autor(&quot;Scott Meyers&quot;), Titel(0));

  std::cout &lt;&lt; result &lt;&lt; std::endl;

}
</code></pre>
</blockquote>
<p>Echt? Machst du eine extra Klasse für Name, Vorname, Straße, Benutzername, Titel, Nachrichtentext, X-Koordinate, Y-Koordinate, Autoname, Schiffname usw...</p>
</blockquote>
<p>Dort wo es sinnvoll 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>Ist sicher nicht überall sinnvoll. Scott Meyers hat sich da mit dem Datum aber ein sehr gutes Beispiel gesucht. Angenommen du schreibst eine Klasse, die ein Datum kapselt. Dann wäre der Konstruktor schnell aufgeschrieben:</p>
<pre><code class="language-cpp">Date(int day, int month, int year);
</code></pre>
<p>Jetzt stell dir vor, ein Ami benutzt die Klasse für Weihnachten:</p>
<pre><code class="language-cpp">Date xmas = Date(12,24,2011);
</code></pre>
<p>Okay, das kannst du mit assert() oder ähnlichem Abfangen, aber was ist mit dem 6.1.</p>
<pre><code class="language-cpp">Date heiligeDreiKoenige = Date(1,6,2012);
</code></pre>
<p>Rumms! Nun wird das Weihnachtszeugs zum Kindertag weggeräumt <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>In diesem Speziellen Fall sind Klassen geeignet um ein fehlerhaftes Benutzen der Klasse schon beim <strong>kompilieren</strong> zu entdecken.</p>
<pre><code class="language-cpp">Date(Day d, Month m, Year y);
</code></pre>
<p>(Achtung: explicit Konstruktor, hab ich oben vergessen)</p>
<p>Der selbe Ami kann nun folgendes nicht mehr kompilieren:</p>
<pre><code class="language-cpp">Date nikolaus = Date(Month(12), Day(6), Year(2011));
</code></pre>
<p>Damit haben wir einen Logikfehler bereits beim Kompileren abgefangen. Super!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2141077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2141077</guid><dc:creator><![CDATA[bmario_]]></dc:creator><pubDate>Sun, 06 Nov 2011 13:32:07 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Sun, 06 Nov 2011 14:03:49 GMT]]></title><description><![CDATA[<p>Und um nicht für alles eine separate Klasse zu schreiben, kannst du z.B. sowas verwenden:</p>
<pre><code class="language-cpp">template &lt;typename T, typename TypeTag = void&gt;
class Value
{
	public:
		Value()
		: mValue()
		{
		}

		explicit Value(T value)
		: mValue(value)
		{
		}

		T Get() const
		{
			return mValue;
		}

	private:
		T mValue;
};
</code></pre>
<p>Der zweite Template-Parameter dient zur typsicheren Unterscheidung bei ähnlichen Typen. Beispiel:</p>
<pre><code class="language-cpp">namespace Tags
{
	struct Day;
	struct Month;
	struct Year;
}

typedef Value&lt;int, Tags::Day&gt;   Day;
typedef Value&lt;int, Tags::Month&gt; Month;
typedef Value&lt;int, Tags::Year&gt;  Year;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2141096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2141096</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 06 Nov 2011 14:03:49 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen mit variierender Argumentenanzahl on Sun, 06 Nov 2011 16:20:37 GMT]]></title><description><![CDATA[<p>Ja Nexus, dass ist definitiv praktisch <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>Die Grundidee bleibt aber die selbe. Ein eigener Typ für semantisch verschiedene Eingabewerte. Man muss das natürlich nicht immer so machen, aber gerade für Schnittstellen bietet sich diese zusätzliche Sicherheit an. Man kann das ganze auch weitertreiben, etwa Day in Abhängigkeit zu Month bringen (30 vs 31 Tage) oder gar noch Year (man denke nur Schaltjahre). Aber dies sollte man im Einzelfall überprüfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2141183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2141183</guid><dc:creator><![CDATA[bmario_]]></dc:creator><pubDate>Sun, 06 Nov 2011 16:20:37 GMT</pubDate></item></channel></rss>