<?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[Temporäres Objekt ohne Konstruktor an Funktion übergeben]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte ein Objekt an eine Funktion übergeben, und dieses aber erst im Aufruf erstellen, also so:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

struct Data {
	std::string text;
};

void doSomething(const Data&amp; data) {
	std::cout &lt;&lt; data.text &lt;&lt; std::endl;
}

int main() {
	doSomething(Data{&quot;test&quot;});
}
</code></pre>
<p>Nur leider funktioniert dies nicht, der Compiler (MSVC 10) meckert, dass da ganz viele Syntaxfehler in Zeile 13 sind. Gibt es eine andere Möglichkeit, den Konstruktor wegzulassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289811/temporäres-objekt-ohne-konstruktor-an-funktion-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 22:54:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289811.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Jul 2011 10:53:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Temporäres Objekt ohne Konstruktor an Funktion übergeben on Wed, 13 Jul 2011 10:53:27 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte ein Objekt an eine Funktion übergeben, und dieses aber erst im Aufruf erstellen, also so:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

struct Data {
	std::string text;
};

void doSomething(const Data&amp; data) {
	std::cout &lt;&lt; data.text &lt;&lt; std::endl;
}

int main() {
	doSomething(Data{&quot;test&quot;});
}
</code></pre>
<p>Nur leider funktioniert dies nicht, der Compiler (MSVC 10) meckert, dass da ganz viele Syntaxfehler in Zeile 13 sind. Gibt es eine andere Möglichkeit, den Konstruktor wegzulassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092242</guid><dc:creator><![CDATA[BubiBoy]]></dc:creator><pubDate>Wed, 13 Jul 2011 10:53:27 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäres Objekt ohne Konstruktor an Funktion übergeben on Wed, 13 Jul 2011 11:03:47 GMT]]></title><description><![CDATA[<p>Du willst also ein Objekt vom Typ Data aus deinem const char [5] erzeugen, ohne es zu erzeugen (konstruieren)? Das wird nicht gehen.</p>
<p>Sowas müssteste dann schon machen</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

struct Data {
    Data( const char* str ) : text( str ) {}
    std::string text;
};

void doSomething(const Data&amp; data) {
    std::cout &lt;&lt; data.text &lt;&lt; std::endl;
}

int main() {
    doSomething(Data(&quot;test&quot;));
}
</code></pre>
<p>In Zeile 14 hab ich dann übrigens deine geschweiften Klammern durch runde ersetzt. <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/2092251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092251</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Wed, 13 Jul 2011 11:03:47 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäres Objekt ohne Konstruktor an Funktion übergeben on Wed, 13 Jul 2011 11:14:59 GMT]]></title><description><![CDATA[<p>Wenn du Data nicht anfassen darfst/willst und das oft genug vorkommt, dass du es on the fly an <em>genau diese</em> Funktion übergibst, käme evtl. eine Funktionsüberladung in Betracht:</p>
<pre><code class="language-cpp">void doSomething(const Data&amp; data);

void doSomething(const std::string&amp; str) {
  Data d;
  d.str = str;
  doSomething(d);
}
</code></pre>
<p>Wenn du <em>generell</em> häufig ein data aus einem string machst, eine Konvertierungsfunktion:</p>
<pre><code class="language-cpp">Data strToData(std::string const&amp; str)
{
  Data d;
  d.str = str;
  return d;
}

/* ... */
void somewhere_else()
{
  doSomething(strToData(&quot;Meh&quot;));
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2092260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092260</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 13 Jul 2011 11:14:59 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäres Objekt ohne Konstruktor an Funktion übergeben on Wed, 13 Jul 2011 11:34:45 GMT]]></title><description><![CDATA[<p>Also der Hintergrund der ganzen Sache ist, dass ich ein struct namens BaseData mit 15 Elementen habe, und ein paar andere Structs die ein BaseData Objekt besitzen, also so (vereinfacht):</p>
<pre><code class="language-cpp">struct BaseData {
    int int1;
    std::string text;
}

struct OtherData {
    BaseData base;
    int int2;
}
// usw.
</code></pre>
<p>Jetzt kann ich zwar ein OtherData Objekt so ohne Konstruktor initialisieren:</p>
<pre><code class="language-cpp">OtherData data = {1, &quot;test&quot;, 2};
</code></pre>
<p>Jedoch muss ich, wenn ich eine Funktion die ein OtherData Objekt benötigt zehn mal aufrufe zehn OtherData Objekte erstellen, da man immer nur einmal ein Objekt so schön initialisieren kann. Also etwa so:</p>
<pre><code class="language-cpp">void foo(const OtherData&amp; data) {
//...
} 

int main() {
    OtherData data1 = {1, &quot;test&quot;, 2};
    foo(data1);
    OtherData data2 = {2, &quot;test&quot;, 2};
    foo(data2);
    OtherData data3 = {3, &quot;test&quot;, 2};
    foo(data3);
}
</code></pre>
<p>Das ganze wird zwar alles vom Compiler optimiert, jedoch sieht es hässlich aus und ist eine Menge schreibarbeit.<br />
Die einzige Alternative scheint also ein Konstrukor zu sein, jedoch schreibe ich mich dumm und dämlich, wenn ich z.B. 10 structs habe, die ein OtherData Objekt besitzen, und jeder Konstruktor davon 15 bis 20 Argumente annehmen muss.<br />
Gibt es dafür jetzt also eine schreibärmere und elegantere Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092265</guid><dc:creator><![CDATA[BubiBoy]]></dc:creator><pubDate>Wed, 13 Jul 2011 11:34:45 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäres Objekt ohne Konstruktor an Funktion übergeben on Wed, 13 Jul 2011 12:06:09 GMT]]></title><description><![CDATA[<p>BubiBoy schrieb:</p>
<blockquote>
<p>jeder Konstruktor davon 15 bis 20 Argumente annehmen muss.<br />
Gibt es dafür jetzt also eine schreibärmere und elegantere Lösung?</p>
</blockquote>
<p>Das ist wahnsinn. Warum gibst du dem BaseData struct nicht einen Konstruktor? Du wirst dann doch eh BaseData's rumreichen und ggf. modifizieren, aber nicht jedesmal alle Werte einzeln neu zusammenstückeln oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092285</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 13 Jul 2011 12:06:09 GMT</pubDate></item></channel></rss>