<?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[Problem mit template-Klasse]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich habe eine Template-Klasse, welche allerdings nur char und wchar_t zulassen darf. Wie kann ich fehlerhafte Eingaben des Nutzers abfangen?</p>
<p>Naja, und meine nächste Frage. Ich möchte einen konstanten Zeiger auf eine Zeichenkette zurückgeben...</p>
<pre><code class="language-cpp">const char_t* getDescription() //char_t ist ein typedef auf char bzw wchar_t
{
    return &quot;Description&quot;; //Wie kann ich im Falle von wchar_t das ganze als Widechar-Zeichenkette zurückgeben?
}
</code></pre>
<p>Danke schonmal <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 />
Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/260619/problem-mit-template-klasse</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 00:33:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/260619.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 07 Feb 2010 21:13:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 21:14:03 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich habe eine Template-Klasse, welche allerdings nur char und wchar_t zulassen darf. Wie kann ich fehlerhafte Eingaben des Nutzers abfangen?</p>
<p>Naja, und meine nächste Frage. Ich möchte einen konstanten Zeiger auf eine Zeichenkette zurückgeben...</p>
<pre><code class="language-cpp">const char_t* getDescription() //char_t ist ein typedef auf char bzw wchar_t
{
    return &quot;Description&quot;; //Wie kann ich im Falle von wchar_t das ganze als Widechar-Zeichenkette zurückgeben?
}
</code></pre>
<p>Danke schonmal <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 />
Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852074</guid><dc:creator><![CDATA[Icematix]]></dc:creator><pubDate>Sun, 07 Feb 2010 21:14:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 21:59:43 GMT]]></title><description><![CDATA[<p>Als erstes kannst du z.B die Klasse spezialisieren und nur für diese beiden Typen implementieren. Ansonsten kannst du auch mit <a href="http://www.boost.org/doc/libs/1_42_0/libs/utility/enable_if.html" rel="nofollow">boost.enable_if</a>[url] arbeiten.</p>
<p>Beim zweiten kannst du ein L vor die Zeichenkonste setzen.</p>
<pre><code class="language-cpp">const char_t* getDescription() //char_t ist ein typedef auf char bzw wchar_t
{
    return L&quot;Description&quot;;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1852099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852099</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 07 Feb 2010 21:59:43 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 22:12:15 GMT]]></title><description><![CDATA[<pre><code>Beim zweiten kannst du ein L vor die Zeichenkonste setzen.
</code></pre>
<p>Was darin resultieren wird, dass der Compiler jammert wenn char_t ein char ist <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>Im Prinzip möchte ich so ein Verhalten (Pseudocode, ich möchte das vom Compiler aufgelöst haben) :</p>
<pre><code class="language-cpp">const char_t* getDescription() //char_t ist ein typedef auf char bzw wchar_t
{
    if(char_t == char)
        return &quot;Description&quot;;
    else if(char_t == wchar_t)
        return L&quot;Description&quot;;
}
</code></pre>
<p>.... enable_if werde ich mir mal ansehen, danke.</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852110</guid><dc:creator><![CDATA[Icematix]]></dc:creator><pubDate>Sun, 07 Feb 2010 22:12:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 22:14:01 GMT]]></title><description><![CDATA[<p>Das wäre eine Möglichkeit:</p>
<pre><code class="language-cpp">template &lt;typename CharType&gt;
class DescriptionImpl;

template &lt;&gt;
class DescriptionImpl&lt;char&gt;
{
	public:
		const char* getDescription() const
		{
			return &quot;Description&quot;;
		}
};

template &lt;&gt;
class DescriptionImpl&lt;wchar_t&gt;
{
	public:
		const wchar_t* getDescription() const
		{
			return L&quot;Description&quot;;
		}
};

template &lt;typename CharType&gt;
class MyClass : public DescriptionImpl&lt;CharType&gt;
{
};
</code></pre>
<p>Ansonsten dürfte <code>BOOST_STATIC_ASSERT</code> vielleicht etwas schönere Fehlermeldungen geben.</p>
<p>Ist etwas mühsam, dass du hier Code duplizieren musst, aber ich sehe keinen Weg, zur <strong>Kompilier</strong>zeit Stringliterale an den Typen anzupassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852111</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 07 Feb 2010 22:14:01 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 22:23:55 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">const char_t* getDescription() //char_t ist ein typedef auf char bzw wchar_t
{
    if(char_t == char)
        return &quot;Description&quot;;
    else if(char_t == wchar_t)
        return L&quot;Description&quot;;
}
</code></pre>
</blockquote>
<p>Was spricht gegen genau diesen Code? Statt &quot;==&quot; halt ein <code>TypesEqual&lt;char_t,char&gt;::equal</code> oder so und vor die Zeichenketten noch casts, dann steht das. Müsste &quot;sicher&quot; sein, verbraucht weniger Code und ist imo hübscher als solche ausgelagerten Dingsis.</p>
<p>PS: Mit</p>
<pre><code class="language-cpp">template&lt;typename T, typename U&gt;
struct TypesEqual
{
	enum {equal=false};
};

template&lt;typename T&gt;
struct TypesEqual&lt;T,T&gt;
{
	enum {equal=true};
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1852115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852115</guid><dc:creator><![CDATA[Badestrand_]]></dc:creator><pubDate>Sun, 07 Feb 2010 22:23:55 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 22:27:13 GMT]]></title><description><![CDATA[<p>Badestrand_ schrieb:</p>
<blockquote>
<p>Müsste &quot;sicher&quot; sein, verbraucht weniger Code und ist imo hübscher als solche ausgelagerten Dingsis.</p>
</blockquote>
<p>Jetzt interessiert mich aber, wie deine <code>getDescription</code> aussieht. Du kannst nämlich nicht beide <code>return</code> -Statements im Code haben, auch wenn eines davon mit Sicherheit nie erreicht wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852116</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 07 Feb 2010 22:27:13 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 22:42:20 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;typename char_t&gt;
struct X
{
	const char_t* getDescription()
	{
		if ( TypesEqual&lt;char_t,char&gt;::equal )
			return reinterpret_cast&lt;char_t*&gt;( &quot;Description&quot; );
		else if ( TypesEqual&lt;char_t,wchar_t&gt;::equal )
			return reinterpret_cast&lt;char_t*&gt;( L&quot;Description&quot; );
	}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1852122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852122</guid><dc:creator><![CDATA[Badestrand_]]></dc:creator><pubDate>Sun, 07 Feb 2010 22:42:20 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 22:56:28 GMT]]></title><description><![CDATA[<p>Okay, aber ob <code>reinterpret_cast</code> so viel schöner ist... Edit: Ah, die Casts habe ich in deinem ersten Post überlesen und erst jetzt gesehen. Sorry für die sinnlose Frage, wie du das implementieren würdest.</p>
<p>Abgesehen davon finde ich es unnötig, Performance für ein <code>if</code> zu verschwenden, wenn die Bedingung zur Kompilierzeit bekannt ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852124</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 07 Feb 2010 22:56:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 22:56:41 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Okay, aber ob <code>reinterpret_cast</code> so viel schöner ist...</p>
</blockquote>
<p>7 statt 20 Zeilen Code und einmal Vererbung weniger, ich finde das schon ein Argument...</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Abgesehen davon finde ich es unnötig, Performance für ein <code>if</code> zu verschwenden, wenn die Bedingung zur Kompilierzeit bekannt ist.</p>
</blockquote>
<p>Also mich würde es wirklich wundern, wenn <em>das</em> nicht rausoptimiert wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852127</guid><dc:creator><![CDATA[Badestrand_]]></dc:creator><pubDate>Sun, 07 Feb 2010 22:56:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 23:12:38 GMT]]></title><description><![CDATA[<p>Hm, stimmt eigentlich schon. <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>Naja, ist wohl etwas Geschmackssache. Wenn ich den Code anschauen würde, wäre mir sicher nicht sofort klar, warum ein Cast verwendet wurde. Aber ein Kommentar könnte da sicher helfen.</p>
<p>Vielleicht schaue ich solche Templatemetaprogrammierungs-Techniken auch etwas zu konservativ an. <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/1852128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852128</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 07 Feb 2010 23:12:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 23:13:05 GMT]]></title><description><![CDATA[<p>Auf Jedenfall ist Badestrand-Lösung sehr teuer. Obwohl er Template benutzt :s Eigentlich frag ich mich, wieso in C++ String kein typedef auf basic_string&lt;char&gt; oder basic_string&lt;wchar_t&gt; jenachdem ob UNICODE definiert ist. Sowie mit entsprechend T Macro, der den Stringliteral entsprechend ersetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852132</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sun, 07 Feb 2010 23:13:05 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 23:20:28 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>Auf Jedenfall ist Badestrand-Lösung sehr teuer.</p>
</blockquote>
<p>Ja, leider schon. Ich würde schätzen, dass man schon so mit 2 bis 3 Sekunden Delay (Ausführungszeit) rechnen muss, auf aktuellen PCs. Gerade die if-Schleife und das teure reinterpret_cast, was ja bekanntlich zur Compilezeit wirkt, düften ziemlich viel fressen. Vielleicht kannst du mal ein wenig benchmarken, dann wissen wir mehr!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852138</guid><dc:creator><![CDATA[Badestrand_]]></dc:creator><pubDate>Sun, 07 Feb 2010 23:20:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 23:26:58 GMT]]></title><description><![CDATA[<p>Du meinst zu Laufzeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852142</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sun, 07 Feb 2010 23:26:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 23:29:20 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>Du meinst zu Laufzeit.</p>
</blockquote>
<p>Nein, er meint schon zur Compilezeit. Um Speicherbereiche anders zu interpretieren, braucht es keinen dynamischen Code.</p>
<p>Und er meinte sicher auch If-Abfrage. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852143</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 07 Feb 2010 23:29:20 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 23:32:31 GMT]]></title><description><![CDATA[<p>Unglaublich teuer *g*</p>
<p>Das hat VC++ daraus gemacht:</p>
<pre><code class="language-asm">mov     eax, offset aDescription ; &quot;Description&quot;
retn
</code></pre>
<p>Danke dafür, die Lösung ist echt nicht schlecht. <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/1852145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852145</guid><dc:creator><![CDATA[Icematix]]></dc:creator><pubDate>Sun, 07 Feb 2010 23:32:31 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit template-Klasse on Sun, 07 Feb 2010 23:36:48 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Und er meinte sicher auch If-Abfrage. :p</p>
</blockquote>
<p>Hihi, ich dachte, das fällt zwischen dem ganzen Unsinn gar nicht auf <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>Um das mal aufzuklären: Das <code>if ( TypesEqual&lt;char_t,char&gt;::equal )</code> zerfällt beim &quot;Auflösen&quot; der Templates zu <code>if ( true )</code> bzw <code>if ( false )</code> ; was schlicht und ergreifend wegoptimiert wird. Der reinterpret-cast hat genau 0 Kosten, da er nur die Typinformation verändert (zur Compilerzeit), bleibt nur das <code>return</code> . Das brauchst du in jedem Fall, wodurch die Laufzeit irrelevant wird. Falls sie trotzdem jemand wissen will: Sie wird auf aktuellen Systemen ungefähr bei 0,0000000008 Sekunden liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852149</guid><dc:creator><![CDATA[Badestrand_]]></dc:creator><pubDate>Sun, 07 Feb 2010 23:36:48 GMT</pubDate></item></channel></rss>