<?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[KlasseB in KlasseA -&amp;gt; KlasseA gibt B zurück]]></title><description><![CDATA[<p>Hey <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>Ich stehe grade vor einem kleinerem Problem. Und zwar<br />
habe ich Strategy Klassen die nur eine Funktion beeinhalten. z.B.:</p>
<pre><code>class _comTest : public _IStrategy
{
	public:
		void method(shared_ptr&lt;vector&lt;string&gt;&gt; tokens)
		{
			m_CData-&gt;AppendConsoleTXT(&quot;bla bla bla Mr. Freeman\r\n&quot;);
		};
};
</code></pre>
<p>Das Problem ist jetzt, das die Funktion method(), auf Daten zurückgreifen muss.<br />
Also eigentlich so aussieht:</p>
<pre><code>class _comTest : public _IStrategy
{
	public:
		_comTest(shared_ptr&lt;_CData&gt; CData)
		{
			m_CData = CData;
		}
		void method(shared_ptr&lt;vector&lt;string&gt;&gt; tokens)
		{
			m_CData-&gt;AppendConsoleTXT(&quot;bla bla bla Mr. Freeman\r\n&quot;);
		};
	private:
		shared_ptr&lt;_CData&gt;		m_CData;
		_SerialCom*				m_Serial;
};
</code></pre>
<p>Jetzt ist es nur so das, jede dieser _com Klassen exakt den gleichen Konstruktor haben wird, das Einzige das anders wird ist method().<br />
Dann kommt jetzt noch das _comTest in der Klasse _Console aufgerufen wird.</p>
<pre><code>_Console :: _Console(shared_ptr&lt;_CData&gt; CData)
{
	m_CData	= CData;
	m_commands.clear();
	m_commands.push_back(_Command(&quot;test&quot;, shared_ptr&lt;_IStrategy&gt;(new _comTest(m_CData))));
}
</code></pre>
<p>es funktioniert natürlich, aber ich würde es gerne vermeiden jedes mal CData in den Konstruktor zu schreiben, und jedes mal die entsprechende Variablen zu haben.</p>
<p>jemand eine Idee?<br />
Gruß, Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318892/klasseb-in-klassea-gt-klassea-gibt-b-zurück</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 09:52:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318892.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Jul 2013 10:34:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to KlasseB in KlasseA -&amp;gt; KlasseA gibt B zurück on Tue, 30 Jul 2013 10:34:11 GMT]]></title><description><![CDATA[<p>Hey <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>Ich stehe grade vor einem kleinerem Problem. Und zwar<br />
habe ich Strategy Klassen die nur eine Funktion beeinhalten. z.B.:</p>
<pre><code>class _comTest : public _IStrategy
{
	public:
		void method(shared_ptr&lt;vector&lt;string&gt;&gt; tokens)
		{
			m_CData-&gt;AppendConsoleTXT(&quot;bla bla bla Mr. Freeman\r\n&quot;);
		};
};
</code></pre>
<p>Das Problem ist jetzt, das die Funktion method(), auf Daten zurückgreifen muss.<br />
Also eigentlich so aussieht:</p>
<pre><code>class _comTest : public _IStrategy
{
	public:
		_comTest(shared_ptr&lt;_CData&gt; CData)
		{
			m_CData = CData;
		}
		void method(shared_ptr&lt;vector&lt;string&gt;&gt; tokens)
		{
			m_CData-&gt;AppendConsoleTXT(&quot;bla bla bla Mr. Freeman\r\n&quot;);
		};
	private:
		shared_ptr&lt;_CData&gt;		m_CData;
		_SerialCom*				m_Serial;
};
</code></pre>
<p>Jetzt ist es nur so das, jede dieser _com Klassen exakt den gleichen Konstruktor haben wird, das Einzige das anders wird ist method().<br />
Dann kommt jetzt noch das _comTest in der Klasse _Console aufgerufen wird.</p>
<pre><code>_Console :: _Console(shared_ptr&lt;_CData&gt; CData)
{
	m_CData	= CData;
	m_commands.clear();
	m_commands.push_back(_Command(&quot;test&quot;, shared_ptr&lt;_IStrategy&gt;(new _comTest(m_CData))));
}
</code></pre>
<p>es funktioniert natürlich, aber ich würde es gerne vermeiden jedes mal CData in den Konstruktor zu schreiben, und jedes mal die entsprechende Variablen zu haben.</p>
<p>jemand eine Idee?<br />
Gruß, Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342209</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Tue, 30 Jul 2013 10:34:11 GMT</pubDate></item><item><title><![CDATA[Reply to KlasseB in KlasseA -&amp;gt; KlasseA gibt B zurück on Tue, 30 Jul 2013 11:06:47 GMT]]></title><description><![CDATA[<p>Ich hab grade eine Lösung gefunden.</p>
<p>und zwar ändere ich die Strategy Klasse um:</p>
<pre><code>class _IStrategy
{
	public:
		virtual			~_IStrategy(){}
		virtual void	method(shared_ptr&lt;std::vector&lt;std::string&gt;&gt; tokens) = 0;

		static shared_ptr&lt;_CData&gt;	m_CData;
};
</code></pre>
<p>und setze nach dem erstellen von _CData:</p>
<pre><code>_IStrategy::m_CData = m_pCData;
</code></pre>
<p>so kennen alle Klassen die _IStrategy erben auch den Pointer zu CData.</p>
<p>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="🙂"
    /><br />
Das Aufschreiben von Problemen führ bei mir oft zur Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342221</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Tue, 30 Jul 2013 11:06:47 GMT</pubDate></item><item><title><![CDATA[Reply to KlasseB in KlasseA -&amp;gt; KlasseA gibt B zurück on Tue, 30 Jul 2013 11:16:14 GMT]]></title><description><![CDATA[<p>static shared_ptr in abstrakten Basisklassen als Lösung? Klingt erstmal wild. Was soll das werden? So eine Art <a href="http://en.wikipedia.org/wiki/Strategy_pattern" rel="nofollow">Strategy Pattern</a>? Das implementiert man anders und zwar weitaus einfacher und sauberer.</p>
<p>Falls ich falsch vermutet haben sollte, beschreib mal, was du erreichen möchtest. Nicht, wie du dir die technische Umsetzung vorstellst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342222</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 30 Jul 2013 11:16:14 GMT</pubDate></item><item><title><![CDATA[Reply to KlasseB in KlasseA -&amp;gt; KlasseA gibt B zurück on Tue, 30 Jul 2013 12:04:57 GMT]]></title><description><![CDATA[<p>Warum stellst du überall einen Underscore voran? Strenggenommen sind solche Bezeichner <em>reserved for the implementation</em> und dürfen nicht benutzt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342245</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 30 Jul 2013 12:04:57 GMT</pubDate></item><item><title><![CDATA[Reply to KlasseB in KlasseA -&amp;gt; KlasseA gibt B zurück on Tue, 30 Jul 2013 12:34:36 GMT]]></title><description><![CDATA[<p>Das Strategy Pattern ist auch einfacher implementiert.<br />
Es geht bei mir aber um die Implementierung eines solchen Patterns in eine Konsole.</p>
<p>Also:<br />
_Console hat einen Vektor aus Befehlen mit strategy Klassen (z.B._comTest).<br />
Jeder Befehl soll natürlich eine eigene Strategy haben, da kein Befehl die gleiche Aktion ausführt.<br />
Die StrategyKlasse _comTest und alle anderen Strategys benötigen Zugriff auf Daten um diese individuell zu bearbeiten. Das realisiere ich jetzt über den static pointer.<br />
Da alle StrategyKlassen eh IStrategy erben, und so auch den Pointer, den es ohnehin nur einmal gibt, bekommen.</p>
<p>DocShoe schrieb:</p>
<blockquote>
<p>Warum stellst du überall einen Underscore voran? Strenggenommen sind solche Bezeichner <em>reserved for the implementation</em> und dürfen nicht benutzt werden.</p>
</blockquote>
<p>Programiergruppen interner Codingstyle - Ich habe Ihn nicht gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342259</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Tue, 30 Jul 2013 12:34:36 GMT</pubDate></item></channel></rss>