<?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 Konstruktor und Elementinitialisierungsliste]]></title><description><![CDATA[<p>Servus,</p>
<p>ich habe mich gerade in einem Konstruktor verbissen, der dämliche Argumente bekommt.<br />
Kurz gesagt besteht das Problem darin, dass der Konstruktor den Dateinamen eines config-files bekommt, wo das drin steht, was ich brauche um den Elternteil zu initialisieren.</p>
<p>In Code asugedrückt, ist das Problem folgendes:</p>
<pre><code class="language-cpp">class Parent {
public:
  Parent(const std::string&amp; arg1, int arg2, int arg3);
};

class Child {
public:
  Child(const std::string&amp; config_file_name):
  Parent(wert_der_aus_config_file_kommt1, 
         wert_der_aus_config_file_kommt2,
         wert_der_aus_config_file_kommt3)
{}
};
</code></pre>
<p>Ihr seht, wo das Problem liegt: Um an den Wert zu kommen, muss ich das Config-File lesen und parsen. Das kann ich im Konstruktor-Body. Ich brauche die Werte aber schon in der Elementinitialisierungsliste, sonst kann ich ja den Parent nicht mehr initialisieren.<br />
Signatur des Konstruktors ist durch die Applikation, die die Klasse benutzt, vorgegeben, ich kann mir also nicht die vor-verarbeiteten Werte von draußen reingeben lassen.<br />
Das Auslesen des config-Files in den Konstruktor von Parent zu verlagern wäre eine Option, die ist aber mit großen Schmerzen verbunden, da ich dann eine Menge Information in Parent bringen muss, die in Parent nix verloren hat =&gt; kein orthogonales Design mehr.</p>
<p>Habt ihr bessere Vorschläge?</p>
<p>Philipp</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/272717/problem-mit-konstruktor-und-elementinitialisierungsliste</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 17:37:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/272717.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Aug 2010 18:13:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Konstruktor und Elementinitialisierungsliste on Mon, 23 Aug 2010 18:13:55 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>ich habe mich gerade in einem Konstruktor verbissen, der dämliche Argumente bekommt.<br />
Kurz gesagt besteht das Problem darin, dass der Konstruktor den Dateinamen eines config-files bekommt, wo das drin steht, was ich brauche um den Elternteil zu initialisieren.</p>
<p>In Code asugedrückt, ist das Problem folgendes:</p>
<pre><code class="language-cpp">class Parent {
public:
  Parent(const std::string&amp; arg1, int arg2, int arg3);
};

class Child {
public:
  Child(const std::string&amp; config_file_name):
  Parent(wert_der_aus_config_file_kommt1, 
         wert_der_aus_config_file_kommt2,
         wert_der_aus_config_file_kommt3)
{}
};
</code></pre>
<p>Ihr seht, wo das Problem liegt: Um an den Wert zu kommen, muss ich das Config-File lesen und parsen. Das kann ich im Konstruktor-Body. Ich brauche die Werte aber schon in der Elementinitialisierungsliste, sonst kann ich ja den Parent nicht mehr initialisieren.<br />
Signatur des Konstruktors ist durch die Applikation, die die Klasse benutzt, vorgegeben, ich kann mir also nicht die vor-verarbeiteten Werte von draußen reingeben lassen.<br />
Das Auslesen des config-Files in den Konstruktor von Parent zu verlagern wäre eine Option, die ist aber mit großen Schmerzen verbunden, da ich dann eine Menge Information in Parent bringen muss, die in Parent nix verloren hat =&gt; kein orthogonales Design mehr.</p>
<p>Habt ihr bessere Vorschläge?</p>
<p>Philipp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943519</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Mon, 23 Aug 2010 18:13:55 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Konstruktor und Elementinitialisierungsliste on Mon, 23 Aug 2010 18:21:42 GMT]]></title><description><![CDATA[<p>PhilippM schrieb:</p>
<blockquote>
<p>Habt ihr bessere Vorschläge?</p>
</blockquote>
<p>Keine Vererbung benutzen? Das was du hier beschreibst klingt überhaupt nicht nach einer Ist-Ein-Beziehung.</p>
<p>Ansonsten: Man kann auch komplexe Ausdrücke in die Intitialisierungsliste schreiben, du könntest also auch einen Parserfunktionsaufruf als Argument für die Basisklasse dort unterbringen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943522</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 23 Aug 2010 18:21:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Konstruktor und Elementinitialisierungsliste on Mon, 23 Aug 2010 19:01:07 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Keine Vererbung benutzen?</p>
</blockquote>
<p>Da ist in der Tat was dran. Aber leider bin ich auch hier durch die Gegebenheiten des Projekts eingeschränkt. Ich werde das nicht aufbrechen können, leider. Leider kann man nicht immer das machen, was sinnvoll wäre <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<blockquote>
<p>Ansonsten: Man kann auch komplexe Ausdrücke in die Intitialisierungsliste schreiben, du könntest also auch einen Parserfunktionsaufruf als Argument für die Basisklasse dort unterbringen.</p>
</blockquote>
<p>Hmm, wie sähe das aus?<br />
Der Aufruf zum holen der Werte sieht so aus:</p>
<pre><code class="language-cpp">Config cfg(cfg_file_name);
// Set default values
cfg.setStringValue(VALUE_NAME1, VALUE_DEFAULT1);
cfg.setValue(VALUE_NAME2, VALUE_DEFAULT2);
// load from file, this will override the defaults
cfg.loadFromFile();
// write to file. Ensures default values are written to file (if file didn't exist)
cfg.writeToFile();
std::string arg1 = cfg.getStringValue(VALUE_NAME1);
int arg2 = cfg.getValue(VALUE_NAME2);
</code></pre>
<p>Wie soll ich denn diesen Rhabarber in der Elementinitialisierungsliste unterbringen? Eine statische Memberfunktion machen?</p>
<p>Philipp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943539</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Mon, 23 Aug 2010 19:01:07 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Konstruktor und Elementinitialisierungsliste on Mon, 23 Aug 2010 19:15:36 GMT]]></title><description><![CDATA[<p>PhilippM schrieb:</p>
<blockquote>
<p>Wie soll ich denn diesen Rhabarber in der Elementinitialisierungsliste unterbringen? Eine statische Memberfunktion machen?</p>
</blockquote>
<p>Ja. Oder eine freie Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943548</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 23 Aug 2010 19:15:36 GMT</pubDate></item></channel></rss>