<?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[template funktion]]></title><description><![CDATA[<p>Hallo ich habe eine triviale Funktion die in etwa so aussieht:</p>
<pre><code>const char * replaceElements(const char * str) {
		std::string tmp (str);
		//tue irgendwas mit dem String, z.B.:
        tmp.replace(tmp.find(&quot;Element&quot;), 7, &quot;Tnemele&quot;);
		const char * result = tmp.c_str();
		return result;
	}
</code></pre>
<p>ich möchte die Funktion generisch umschreiben, sodass sie sowohl mit const char *, als auch mit const wchar_t * arbeitet. Der Funktionskopf wäre dann:</p>
<pre><code>template &lt;typename CharArray&gt;
CharArray replaceElements(CharArray)
</code></pre>
<p>Das hört sich erstmal einfach an, aber ich zerbreche mir schon seit einer ganzen Weile den Kopf darüber. Es ist hierbei nicht wichtig, dass die Klasse String verwendet wird... wichtig ist nur, dass die übergebene Zeichenkette kopiert und an der Kopie etwas verändert werden kann. Hat jemand vielleicht eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/313258/template-funktion</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 07:50:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/313258.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Jan 2013 12:40:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 12:50:21 GMT]]></title><description><![CDATA[<p>Hallo ich habe eine triviale Funktion die in etwa so aussieht:</p>
<pre><code>const char * replaceElements(const char * str) {
		std::string tmp (str);
		//tue irgendwas mit dem String, z.B.:
        tmp.replace(tmp.find(&quot;Element&quot;), 7, &quot;Tnemele&quot;);
		const char * result = tmp.c_str();
		return result;
	}
</code></pre>
<p>ich möchte die Funktion generisch umschreiben, sodass sie sowohl mit const char *, als auch mit const wchar_t * arbeitet. Der Funktionskopf wäre dann:</p>
<pre><code>template &lt;typename CharArray&gt;
CharArray replaceElements(CharArray)
</code></pre>
<p>Das hört sich erstmal einfach an, aber ich zerbreche mir schon seit einer ganzen Weile den Kopf darüber. Es ist hierbei nicht wichtig, dass die Klasse String verwendet wird... wichtig ist nur, dass die übergebene Zeichenkette kopiert und an der Kopie etwas verändert werden kann. Hat jemand vielleicht eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293344</guid><dc:creator><![CDATA[Soahc]]></dc:creator><pubDate>Fri, 25 Jan 2013 12:50:21 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 12:41:19 GMT]]></title><description><![CDATA[<p>Deine Funktion ist kaputt, weil sie einen ungültigen Zeiger zurückgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293345</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Fri, 25 Jan 2013 12:41:19 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 13:28:23 GMT]]></title><description><![CDATA[<p>Soahc schrieb:</p>
<blockquote>
<p>Es ist hierbei nicht wichtig, dass die Klasse String verwendet wird... wichtig ist nur, dass die übergebene Zeichenkette kopiert und an der Kopie etwas verändert werden kann. Hat jemand vielleicht eine Idee?</p>
</blockquote>
<p>Wenn Du den String kopierst, dann mache es mit std:string und gebe auch einen eben solchen zurück - alles andere macht Arbeit und ist fehlerträchtig:</p>
<pre><code>template&lt; typename E, typename Traits &gt;
std::basic_string&lt; E, Traits &gt; replaceElements( const std::basic_string&lt; E, Traits &gt;&amp; str ) {
    std::basic_string&lt; E, Traits &gt; tmp (str);
    //tue irgendwas mit dem String, z.B.:
    const std::basic_string&lt; E, Traits &gt; tag = &quot;Element&quot;;
    const std::basic_string&lt; E, Traits &gt;::size_type i = tmp.find(tag);
    if (i != std::basic_string&lt; E, Traits &gt;::npos)
        tmp.replace(i, tag.length(), &quot;Tnemele&quot;);
    return tmp;
}
</code></pre>
<p>bzw.:</p>
<pre><code>template&lt; typename E &gt;
std::basic_string&lt; E, std::char_traits&lt; E &gt; &gt; replaceElements( const E* str ) {
    typedef std::char_traits&lt; E &gt; Traits;
    std::basic_string&lt; E, Traits &gt; tmp (str);
    //tue irgendwas mit dem String, z.B.:
    const std::basic_string&lt; E, Traits &gt; tag = &quot;Element&quot;;
    const std::basic_string&lt; E, Traits &gt;::size_type i = tmp.find(tag);
    if (i != std::basic_string&lt; E, Traits &gt;::npos)
        tmp.replace(i, tag.length(), &quot;Tnemele&quot;);
    return tmp;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2293360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293360</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Fri, 25 Jan 2013 13:28:23 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 14:35:01 GMT]]></title><description><![CDATA[<p>Hallo Werner, danke für die Antwort.<br />
Ich habe deinen zweiten Vorschlag verwendet,<br />
und wenn ich die Funktion nur mit einem Char-Array<br />
aufrufe funktioniert es taldellos. Rufe<br />
ich die Funktion hingegen mit einem wchar_t-Array auf,<br />
bekomme ich 2 Fehler:</p>
<p>In Zeile 6:<br />
Umwandlung von »const char [8]« in nicht-skalaren Typen »const std::basic_string&lt;wchar_t&gt;« angefordert</p>
<p>und in Zeile 8:<br />
keine passende Funktion für Aufruf von »std::basic_string&lt;wchar_t&gt;::replace(size_t&amp;, std::basic_string&lt;wchar_t&gt;::size_type, const char [8])«</p>
<p>Die Zeichenketten &quot;Element&quot; und &quot;Tnemele&quot; liegen als Char-Arrays vor und können nicht direckt in einen wstring umgewandelt werden. <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=":/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293376</guid><dc:creator><![CDATA[Soahc]]></dc:creator><pubDate>Fri, 25 Jan 2013 14:35:01 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 14:31:25 GMT]]></title><description><![CDATA[<p>Die Literale müssen natürlich auch wchar_t sein!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293377</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 25 Jan 2013 14:31:25 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 14:48:33 GMT]]></title><description><![CDATA[<p>leider ist es so einfach nicht, dann funktioniert die Funktion zwar mit wchar_t-Arrays, aber nicht mehr mit char-Arrays. Die Literale müssen auch generisch sein. Das ist wirklich ganz schön knifflig.!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293382</guid><dc:creator><![CDATA[Soahc]]></dc:creator><pubDate>Fri, 25 Jan 2013 14:48:33 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 14:53:07 GMT]]></title><description><![CDATA[<p><a href="http://www.c-plusplus.net/forum/39492-full" rel="nofollow">http://www.c-plusplus.net/forum/39492-full</a><br />
Casten ist das Stichwort.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293384</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 25 Jan 2013 14:53:07 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 15:13:37 GMT]]></title><description><![CDATA[<p>hast Du die Funktionen von Werner überhaupt im Ansatz verstanden? Wie man casted weiß ich, aber das hilft hier nicht. Ich brauche einen generischen Ansatz keinen statischen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293389</guid><dc:creator><![CDATA[Soahc]]></dc:creator><pubDate>Fri, 25 Jan 2013 15:13:37 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 15:14:59 GMT]]></title><description><![CDATA[<p>Oder beide Varianten von Werner zusammen, um unnötige Temporaries zu vermeiden (C++11 move-Ctors). Für die Literale muss man dann noch einen kleinen Umweg gehen:</p>
<pre><code>std::pair&lt;char const*, char const*&gt; getReplacement(char*) {
  return std::make_pair(&quot;Element&quot;, &quot;Tnemele&quot;);
}

std::pair&lt;wchar_t const*, wchar_t const*&gt; getReplacement(wchar_t*) {
  return std::make_pair(L&quot;Element&quot;, L&quot;Tnemele&quot;);
}

template&lt; typename E, typename Traits &gt;
std::basic_string&lt; E, Traits &gt; replaceElements( std::basic_string&lt; E, Traits &gt; str ) {
    typedef std::basic_string&lt; E, Traits &gt; string_t;
    auto replacement = getReplacement((E*)0);
    string_t tag(replacement.first);
    auto pos = str.find(tag);
    if (pos != string_t::npos)
        str.replace(pos, tag.length(), replacement.second);
    return str;
}

template &lt;typename E&gt;
auto replaceElements(E const* ptr) -&gt; std::basic_string&lt;E&gt;
{ return replaceElements(std::basic_string&lt;E&gt;(ptr)); }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2293390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293390</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 25 Jan 2013 15:14:59 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 15:22:03 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/28475">@Soahc</a>:<br />
Was sprichst dagegen nach basic_string&lt;E, Traits&gt; zu casten?<br />
Pumuckls Idee wäre mein zweiter Vorschlag gewesen.</p>
<p>Edit: Zum casten kannst du dank den char_traits auf den zugrundeliegenden Zeichentyp zugreifen. Das ist dann ein komplett generischer Ansatz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293393</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 25 Jan 2013 15:22:03 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 15:38:43 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/28475">@Soahc</a>:<br />
Was sprichst dagegen nach basic_string&lt;E, Traits&gt; zu casten?<br />
Pumuckls Idee wäre mein zweiter Vorschlag gewesen.</p>
<p>Edit: Zum casten kannst du dank den char_traits auf den zugrundeliegenden Zeichentyp zugreifen. Das ist dann ein komplett generischer Ansatz.</p>
</blockquote>
<p>Wie sollen die beiden Vorschläge funktionieren? Bitte gib mal Beispiele für den Cast auf basic_string&lt;E, T&gt; und den ominösen &quot;komplett generischen Ansatz&quot;. Du kannst nicht ohne Spezialbehandlung mit einem Literal beide Stringtypen abfackeln.</p>
<p>Aber von alledem mal ganz abgesehen: lass den ganzen Quatsch, lass wchar_t komplett weg, <a href="http://utf8everywhere.org" rel="nofollow">das ist eh keine gute Idee.</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293401</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 25 Jan 2013 15:38:43 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 15:52:45 GMT]]></title><description><![CDATA[<p>Es geht sogar viel einfach wie ich gerade feststellen konnte.</p>
<pre><code>string literal = &quot;Das Literal, immer vom Typ string.&quot;;
funktionDieLiteralBraucht(basic_string&lt;E, Traits&gt;(literal.begin(), literal.end()));
</code></pre>
<p>Klappt bei mir (gcc und C++11) wunderbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293407</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 25 Jan 2013 15:52:45 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 16:00:59 GMT]]></title><description><![CDATA[<p>danke pumuckl! gut ich musste erstmal ein wenig mit dem compiler kämpfen, dass er c++11 verwendet. Aber jetzt funktioniert es. Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293410</guid><dc:creator><![CDATA[Soahc]]></dc:creator><pubDate>Fri, 25 Jan 2013 16:00:59 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 17:03:43 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Es geht sogar viel einfach wie ich gerade feststellen konnte.</p>
<pre><code>string literal = &quot;Das Literal, immer vom Typ string.&quot;;
funktionDieLiteralBraucht(basic_string&lt;E, Traits&gt;(literal.begin(), literal.end()));
</code></pre>
<p>Klappt bei mir (gcc und C++11) wunderbar.</p>
</blockquote>
<p>Gute Idee, danke <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">template &lt;class E, class T = std::char_traits&lt;E&gt;, unsigned N = 0&gt;
std::basic_string&lt;E, T&gt; convertLiteral(char const(&amp; lit)[N])
{ return std::basic_string&lt;E, T&gt;(lit, lit+N); }

template&lt; typename E, typename Traits &gt;
std::basic_string&lt; E, Traits &gt; replaceElements( std::basic_string&lt; E, Traits &gt; str ) {
    auto tag = convertLiteral&lt;E, Traits&gt;(&quot;Element&quot;);
    auto pos = str.find(tag);
    if (pos != decltype(str)::npos)
        str.replace(pos, tag.length(), convertLiteral&lt;E, Traits&gt;(&quot;Tnemele&quot;));
    return str;
}

template &lt;typename E&gt;
auto replaceElements(E const* ptr) -&gt; std::basic_string&lt;E&gt;
{ return replaceElements(std::basic_string&lt;E&gt;(ptr)); }
</code></pre>
<p>Trotzdem kein wchar_t bitte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293426</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 25 Jan 2013 17:03:43 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 17:29:53 GMT]]></title><description><![CDATA[<p>Die letzte Variante funktioniert bei mir leider nicht. Ich kann zwar kompilieren, aber die Elemente werden nicht getauscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293441</guid><dc:creator><![CDATA[Soahc]]></dc:creator><pubDate>Fri, 25 Jan 2013 17:29:53 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Fri, 25 Jan 2013 18:13:29 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a>:<br />
Gern geschehen.<br />
War für mich auch neu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293471</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 25 Jan 2013 18:13:29 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Sat, 26 Jan 2013 09:46:38 GMT]]></title><description><![CDATA[<p>Soahc schrieb:</p>
<blockquote>
<p>Die letzte Variante funktioniert bei mir leider nicht. Ich kann zwar kompilieren, aber die Elemente werden nicht getauscht.</p>
</blockquote>
<p>Mal mit dem Debugger reingeschaut?</p>
<p>/edit: ich kanns nachstellen, dass das nicht funktioniert: <a href="http://ideone.com/kOLmiU" rel="nofollow">http://ideone.com/kOLmiU</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293577</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 26 Jan 2013 09:46:38 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Sat, 26 Jan 2013 16:37:35 GMT]]></title><description><![CDATA[<p>Es liegt nicht an der Literal-Umwandlung, bei std::string klappt es auch nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293662</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 26 Jan 2013 16:37:35 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Sun, 27 Jan 2013 11:54:16 GMT]]></title><description><![CDATA[<p>Ich wollte gern noch eine Zusatzfunktion schreiben:</p>
<pre><code>template&lt;typename E&gt;
E const* replaceElements(E const* ptr){
	return replaceElements(ptr).c_str();
}
</code></pre>
<p>mit der ich den ursprünglich übergebenen Zeiger umbiegen kann.:</p>
<pre><code>const char *str= &quot;Teste mit Element&quot;;
const wchar_t *wstr= L&quot;Teste ebenfalls mit Element&quot;;

str= replacePointer(str);
wstr= replacePointer(wstr);
</code></pre>
<p>Es wird kompiliert, aber das verhalten ist unvorhersehbar. Rufe ich die Funktion nur einmal auf, dann funktioniert es wie gewünscht, rufe ich sie mehrmals hintereinander auf, dann kommt nur murks dabei raus. Ich vermute, der vom basic_string&lt;E&gt; angeforderte Speicher wird nach dem aufruf von replacePointer wieder freigegeben?! Stimmt das? Und gibt es eine Möglichkeit eine solche Funktion zu schreiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293839</guid><dc:creator><![CDATA[Soahc]]></dc:creator><pubDate>Sun, 27 Jan 2013 11:54:16 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Sun, 27 Jan 2013 12:10:59 GMT]]></title><description><![CDATA[<p>Soahc schrieb:</p>
<blockquote>
<p>Und gibt es eine Möglichkeit eine solche Funktion zu schreiben?</p>
</blockquote>
<p>Nicht so wirklich. Das Problem was du hast ist, dass der innere Aufruf von replaceElements einen temporären string erzeugt. Auf dem rufst du c_str auf, aber direkt danach wird er zerstört, du hast also einen ungültigen Pointer. Dass das mal &quot;funktioniert&quot; und mal nicht, ist typisch für undefiniertes Verhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293841</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sun, 27 Jan 2013 12:10:59 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Sun, 27 Jan 2013 12:40:24 GMT]]></title><description><![CDATA[<p>auch wenn sich das ein bisschen nach Holzhammer-Methode anhört... könnte ich nicht in replacePointer per new-operator ein char bzw. E-array erzeugen, dann die werte des temporären c-strings dort per memcpy hinein kopieren und einen pointer darauf zurück geben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293845</guid><dc:creator><![CDATA[Soahc]]></dc:creator><pubDate>Sun, 27 Jan 2013 12:40:24 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Sun, 27 Jan 2013 12:47:17 GMT]]></title><description><![CDATA[<p>wenn du an einer Stelle mit op new [] etwas anlegst, muß du es an anderer Stelle mit op delete [] wieder freigeben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293847</guid><dc:creator><![CDATA[dd++ 0]]></dc:creator><pubDate>Sun, 27 Jan 2013 12:47:17 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Sun, 27 Jan 2013 12:47:36 GMT]]></title><description><![CDATA[<p>Warum brauchst du überhaupt eine Funktion für Pointer/Char-Arrays?</p>
<p>Und ja, das wäre eine Methode, wenn auch eine schlechte...<br />
Wenn dann einen unique_ptr-Array zurückgeben, das wird im Zweifelsfall automatisch gelöscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293848</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 27 Jan 2013 12:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Sun, 27 Jan 2013 13:08:55 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/29873">@Nathan</a>: Ich finds ja selber total bescheuert, aber es wird vom Auftraggeber so gefordert. <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=":/"
      alt="😕"
    /></p>
<p>Die Funktion sieht jetzt so aus:</p>
<pre><code>template&lt;typename E&gt;
	E const* replacePointer(E const* ptr){
		std::basic_string&lt;E&gt; str = replaceElements(ptr);
		E* array = new E[str.length()];
		memcpy( array,str.c_str(),sizeof(E)*str.length());
		return array;
	}
</code></pre>
<p>und der Code verhält sich so, wie ich es möchte. Aus meiner Sicht dürfte, wenn ich später ein delete auf die pointer mache, auch kein memory-leak entstehen, oder? Trotzdem möchte ich Dich bitten, mir noch mal das mit dem unique_ptr-Array-Problem zu erklären.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293851</guid><dc:creator><![CDATA[Soahc]]></dc:creator><pubDate>Sun, 27 Jan 2013 13:08:55 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Sun, 27 Jan 2013 13:17:55 GMT]]></title><description><![CDATA[<p>der Effekt ist ähnlich wie strdup</p>
<p><a href="http://msdn.microsoft.com/en-us/library/y471khhc%28v=vs.80%29.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/y471khhc%28v=vs.80%29.aspx</a></p>
<p>wobei strdup einen nullterminierten String annimmt und einen nullterminierten String zurückgibt<br />
deine Funktion nimmt einen nullterminierten String an und gibt KEINEN nullterminierten String zurück</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293853</guid><dc:creator><![CDATA[dd++ 0]]></dc:creator><pubDate>Sun, 27 Jan 2013 13:17:55 GMT</pubDate></item><item><title><![CDATA[Reply to template funktion on Sun, 27 Jan 2013 13:27:03 GMT]]></title><description><![CDATA[<p>Aber ich könnte den String doch vor dem zurückgeben null-terminieren, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293856</guid><dc:creator><![CDATA[Soahc]]></dc:creator><pubDate>Sun, 27 Jan 2013 13:27:03 GMT</pubDate></item></channel></rss>