<?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[konstruktor template?]]></title><description><![CDATA[<p>hallo!</p>
<p>Bei std::string gibt es den Konstruktor:</p>
<pre><code>template&lt;class InputIterator&gt; string (InputIterator begin, InputIterator end)
</code></pre>
<p>Den wollt ich mal ausprobieren. Ich hab zum beispiel versucht:</p>
<pre><code>#include&lt;string&gt;
#include&lt;iostream&gt;

int main(int argc,char **argv)
{
	wchar_t *wcp=L&quot;hallo!\n&quot;;

	std::string s&lt;wchar_t*&gt;(wcp,wcp+7);

	std::cout&lt;&lt;s;
}
</code></pre>
<p>Funktioniert natürlich nicht.</p>
<p>Kann mir jemand sagen wo ich</p>
<pre><code>&lt;wchar_t&gt;
</code></pre>
<p>hinschreiben muss?<br />
Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/226975/konstruktor-template</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 08:23:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/226975.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 08 Nov 2008 22:21:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to konstruktor template? on Sat, 08 Nov 2008 22:21:51 GMT]]></title><description><![CDATA[<p>hallo!</p>
<p>Bei std::string gibt es den Konstruktor:</p>
<pre><code>template&lt;class InputIterator&gt; string (InputIterator begin, InputIterator end)
</code></pre>
<p>Den wollt ich mal ausprobieren. Ich hab zum beispiel versucht:</p>
<pre><code>#include&lt;string&gt;
#include&lt;iostream&gt;

int main(int argc,char **argv)
{
	wchar_t *wcp=L&quot;hallo!\n&quot;;

	std::string s&lt;wchar_t*&gt;(wcp,wcp+7);

	std::cout&lt;&lt;s;
}
</code></pre>
<p>Funktioniert natürlich nicht.</p>
<p>Kann mir jemand sagen wo ich</p>
<pre><code>&lt;wchar_t&gt;
</code></pre>
<p>hinschreiben muss?<br />
Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612196</guid><dc:creator><![CDATA[MagicalFlyingMoron]]></dc:creator><pubDate>Sat, 08 Nov 2008 22:21:51 GMT</pubDate></item><item><title><![CDATA[Reply to konstruktor template? on Sat, 08 Nov 2008 23:05:52 GMT]]></title><description><![CDATA[<p>wo schreibst du das &lt;int&gt; denn hin, wenn du einen std::vector vom typ int erstellen willst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612223</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Sat, 08 Nov 2008 23:05:52 GMT</pubDate></item><item><title><![CDATA[Reply to konstruktor template? on Sat, 08 Nov 2008 23:08:27 GMT]]></title><description><![CDATA[<p>Das da:</p>
<pre><code class="language-cpp">template&lt;class InputIterator&gt; string (InputIterator begin, InputIterator end)
</code></pre>
<p>Geht nicht, mit dem da:</p>
<pre><code class="language-cpp">wchar_t *wcp=L&quot;hallo!\n&quot;;
std::string s(wcp, wcp + 7);
</code></pre>
<p>Grund, std::string ist für char da.</p>
<p>Richtig wäre:</p>
<pre><code class="language-cpp">std::wstring str(L&quot;Hallo!\n&quot;);
</code></pre>
<p>Und wenn du diesen speziellen Konstruktor verwenden willst, dann so:</p>
<pre><code class="language-cpp">wchar_t const* w = L&quot;Hallo!\n&quot;;
std::wstring str(w, w + 8); // Kopie von [0, 8[
</code></pre>
<p>Oder mit normalen chars</p>
<pre><code class="language-cpp">char const* c = &quot;Hallo!\n&quot;;
std::string str(c, c + 8);
</code></pre>
<p>Oder mit einem Vektor:</p>
<pre><code class="language-cpp">std::vector&lt;char&gt; vec(10, h);
std::string str(vec.begin(), vec.end());
</code></pre>
<p>Die Templateparameter werden automatisch deduziert beim Aufruf einer Templatefunktion (wozu auch der Konstruktor gehört). Nur wenn die Deduktion nicht eindeutig ist oder man eine Klasse vorliegen hat, muss man die Templateparameter angeben.</p>
<p>Grüssli</p>
<p>PS: Templategrundlagen durchlesen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612225</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 08 Nov 2008 23:08:27 GMT</pubDate></item><item><title><![CDATA[Reply to konstruktor template? on Sat, 08 Nov 2008 23:20:38 GMT]]></title><description><![CDATA[<p>Danke!</p>
<p>Ich hatte gedacht man müsste das &lt;wchar_t&gt; hinschreiben.<br />
Aber</p>
<pre><code>#include&lt;string&gt;
#include&lt;iostream&gt;

int main(int argc,char **argv)
{
    wchar_t *wcp=L&quot;hallo!\n&quot;;

    std::string s(wcp,wcp+7);

    std::cout&lt;&lt;s;
}
</code></pre>
<p>funktioniert (zumindest bei mir)<br />
Ausgabe ist wie gewolt</p>
<pre><code>blabla&gt; ./testprogramm
hallo!
</code></pre>
<p>Das ist ja gerade was ich wollte:<br />
Jeden einzelnen wchar_t in einen char casten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612237</guid><dc:creator><![CDATA[MagicalFlyingMoron]]></dc:creator><pubDate>Sat, 08 Nov 2008 23:20:38 GMT</pubDate></item><item><title><![CDATA[Reply to konstruktor template? on Sun, 09 Nov 2008 00:28:08 GMT]]></title><description><![CDATA[<p>MagicalFlyingMoron schrieb:</p>
<blockquote>
<p>Danke!</p>
<p>Ich hatte gedacht man müsste das &lt;wchar_t&gt; hinschreiben.<br />
Aber</p>
<pre><code>#include&lt;string&gt;
#include&lt;iostream&gt;

int main(int argc,char **argv)
{
    wchar_t *wcp=L&quot;hallo!\n&quot;;

    std::string s(wcp,wcp+7);

    std::cout&lt;&lt;s;
}
</code></pre>
<p>funktioniert (zumindest bei mir)<br />
Ausgabe ist wie gewolt</p>
<pre><code>blabla&gt; ./testprogramm
hallo!
</code></pre>
<p>Das ist ja gerade was ich wollte:<br />
Jeden einzelnen wchar_t in einen char casten.</p>
</blockquote>
<p>Das wird aber ÄUSSERST GEFÄHRLICH!<br />
Führ mal den folgenden Code aus, dann verstehst du, was ich meine.</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{
  wchar_t const* w = L&quot;äöü&quot;;
  std::string str(w, w + 3);

  std::cout &lt;&lt; str &lt;&lt; std::endl;

  return 0;
}
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612253</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 09 Nov 2008 00:28:08 GMT</pubDate></item><item><title><![CDATA[Reply to konstruktor template? on Sun, 09 Nov 2008 00:41:35 GMT]]></title><description><![CDATA[<p>Stimmt. Da kommt nur Mist bei raus.<br />
War auch ein doofes Beispiel von mir. Eine Konvertierung von char nach wchar_t währe warscheinlich sinnvoller und ungefährlicher gewesen,</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612256</guid><dc:creator><![CDATA[MagicalFlyingMoron]]></dc:creator><pubDate>Sun, 09 Nov 2008 00:41:35 GMT</pubDate></item><item><title><![CDATA[Reply to konstruktor template? on Sun, 09 Nov 2008 13:40:49 GMT]]></title><description><![CDATA[<p>MagicalFlyingMoron schrieb:</p>
<blockquote>
<p>Stimmt. Da kommt nur Mist bei raus.<br />
War auch ein doofes Beispiel von mir. Eine Konvertierung von char nach wchar_t währe warscheinlich sinnvoller und ungefährlicher gewesen,</p>
</blockquote>
<p>Ungefährlicher, aber nicht gefahrlos. Solche Konvertierungen von Zeichen sollten, wenn möglich, immer über Locales geschehen:</p>
<p><strong>std::string -&gt; std::wstring</strong></p>
<pre><code class="language-cpp">std::wstring to_wstring(std::string const&amp; str, std::locale const&amp; loc = std::locale())
{
	std::ctype&lt;wchar_t&gt; const&amp; ct = std::use_facet&lt;std::ctype&lt;wchar_t&gt; &gt;(loc);
	std::vector&lt;wchar_t&gt; buffer(str.length());

	ct.widen(str.data(), str.data() + str.length(), &amp;buffer[0]);
	return std::wstring(&amp;buffer[0], buffer.size());
}
</code></pre>
<p><strong>std::wstring -&gt; std::string</strong></p>
<pre><code class="language-cpp">std::string to_string(std::wstring const&amp; wstr, char defaultChar, std::locale const&amp; loc = std::locale())
{
	std::ctype&lt;wchar_t&gt; const&amp; ct = std::use_facet&lt;std::ctype&lt;wchar_t&gt; &gt;(loc);
	std::vector&lt;char&gt; buffer(wstr.length());

	ct.narrow(wstr.data(), wstr.data() + wstr.length(), defaultChar, &amp;buffer[0]);
	return std::string(&amp;buffer[0], buffer.size());
}
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612352</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 09 Nov 2008 13:40:49 GMT</pubDate></item></channel></rss>