<?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[Templates und statische Funktionen]]></title><description><![CDATA[<p>Hallo miteinander,</p>
<p>ich habe folgendes Problem, dass ich bislang noch nicht lösen konnte:</p>
<p>Eine Factory-Klasse soll den Zugriff auf neue Objekt bzw. die Erzeugung dieser erleichtern. Dabei liegt folgender Sachverhalt vor: Es existiert eine abstrakte Klasse RESULT von welcher zahlreiche Klassen erben. Diese Klassen heißen z.B. RADAR2D oder CALCULATION. Letztere bietet die Möglichkeit Objekte beliebigen Typs aufzunehmen. Dazu habe ich die Klasse mit Hilfe von Templates realisiert.</p>
<p>Mein tatsächliches Problem ist nun Folgendes: In der Factory sind statische Funktionen wie etwa createRadar2d() zufinden. Gleiches möchte ich auch für die Calculation-Klasse anbieten. Allerdings weis ich nicht wie ich der Funktion createCalculation() den Zieltyp übergeben kann, welcher später den Typ der Objekte im Calculation Objekt bestimmt.</p>
<p>Hier noch ein paar Ausschnitte aus dem Quellcode.</p>
<p>Klasse Result:</p>
<pre><code class="language-cpp">class Result{

private:

	int mIdentifier;

	static bool initialized;

public:

	int getIdentifier() const;

	virtual XmlElement* serializeToXML() const = 0;

	Result();
	virtual ~Result();

};
</code></pre>
<p>Klasse Radar2d:</p>
<pre><code class="language-cpp">class Radar2d : public Result {

public:

	void addDetection(const Detection2d&amp;);

	virtual XmlElement* serializeToXML() const;

	Radar2d();
	virtual ~Radar2d();

};
</code></pre>
<p>Klasse Calculation:</p>
<pre><code class="language-cpp">template&lt;class T&gt; class Calculation : public Result {

public:

	typedef std::string serialize(const T&amp;);

	void addData(const T&amp;);

	virtual XmlElement* serializeToXML() const;

	Calculation(const serialize*);
	virtual ~Calculation();	

};
</code></pre>
<p>Klasse ResultCreatorFactory:</p>
<pre><code class="language-cpp">class ResultCreatorFactory
{
public:

	static Calculation&lt;int&gt;* createCalculation();  // hier muss wohl etwas anderes stehen
	static Radar2d* createRadar2d();

	/*ResultCreatorFactory();
	virtual ~ResultCreatorFactory();*/
};
</code></pre>
<p>Ich habe keine Ahnung ob mein Konstrukt in C++ überhaupt realisiert werden kann, aber vielleicht hat ja jmd. eine idee, wie ich einen ausweg aus dieser misere finden kann.</p>
<p>mfG</p>
<p>der C++ nope <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/topic/186213/templates-und-statische-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 08:04:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186213.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 06 Jul 2007 09:01:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templates und statische Funktionen on Fri, 06 Jul 2007 09:01:41 GMT]]></title><description><![CDATA[<p>Hallo miteinander,</p>
<p>ich habe folgendes Problem, dass ich bislang noch nicht lösen konnte:</p>
<p>Eine Factory-Klasse soll den Zugriff auf neue Objekt bzw. die Erzeugung dieser erleichtern. Dabei liegt folgender Sachverhalt vor: Es existiert eine abstrakte Klasse RESULT von welcher zahlreiche Klassen erben. Diese Klassen heißen z.B. RADAR2D oder CALCULATION. Letztere bietet die Möglichkeit Objekte beliebigen Typs aufzunehmen. Dazu habe ich die Klasse mit Hilfe von Templates realisiert.</p>
<p>Mein tatsächliches Problem ist nun Folgendes: In der Factory sind statische Funktionen wie etwa createRadar2d() zufinden. Gleiches möchte ich auch für die Calculation-Klasse anbieten. Allerdings weis ich nicht wie ich der Funktion createCalculation() den Zieltyp übergeben kann, welcher später den Typ der Objekte im Calculation Objekt bestimmt.</p>
<p>Hier noch ein paar Ausschnitte aus dem Quellcode.</p>
<p>Klasse Result:</p>
<pre><code class="language-cpp">class Result{

private:

	int mIdentifier;

	static bool initialized;

public:

	int getIdentifier() const;

	virtual XmlElement* serializeToXML() const = 0;

	Result();
	virtual ~Result();

};
</code></pre>
<p>Klasse Radar2d:</p>
<pre><code class="language-cpp">class Radar2d : public Result {

public:

	void addDetection(const Detection2d&amp;);

	virtual XmlElement* serializeToXML() const;

	Radar2d();
	virtual ~Radar2d();

};
</code></pre>
<p>Klasse Calculation:</p>
<pre><code class="language-cpp">template&lt;class T&gt; class Calculation : public Result {

public:

	typedef std::string serialize(const T&amp;);

	void addData(const T&amp;);

	virtual XmlElement* serializeToXML() const;

	Calculation(const serialize*);
	virtual ~Calculation();	

};
</code></pre>
<p>Klasse ResultCreatorFactory:</p>
<pre><code class="language-cpp">class ResultCreatorFactory
{
public:

	static Calculation&lt;int&gt;* createCalculation();  // hier muss wohl etwas anderes stehen
	static Radar2d* createRadar2d();

	/*ResultCreatorFactory();
	virtual ~ResultCreatorFactory();*/
};
</code></pre>
<p>Ich habe keine Ahnung ob mein Konstrukt in C++ überhaupt realisiert werden kann, aber vielleicht hat ja jmd. eine idee, wie ich einen ausweg aus dieser misere finden kann.</p>
<p>mfG</p>
<p>der C++ nope <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/1319487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1319487</guid><dc:creator><![CDATA[c++ nope]]></dc:creator><pubDate>Fri, 06 Jul 2007 09:01:41 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und statische Funktionen on Fri, 06 Jul 2007 09:08:58 GMT]]></title><description><![CDATA[<p>Erstmal am Rande: Was genau soll denn der 'typedef' in der Calculation-Klasse darstellen? Du kannst mit typedef nur Typen definieren und keine Funktionen/Methoden.</p>
<p>Dann: Klar kannst du eine statische Methode auch als Template definieren:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
static Calculation&lt;T&gt;* createCalculation();
</code></pre>
<p>Aber da die Funktion keine Parameter hat, kann der Compiler bei der Anwendung nicht selber ermitteln, welche Spezialisierung er braucht. Also mußt du das selber angeben:</p>
<pre><code class="language-cpp">Calculation&lt;int&gt;* pcal = ResultCreatorFactory::creatCalculation&lt;int&gt;();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1319500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1319500</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 06 Jul 2007 09:08:58 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und statische Funktionen on Fri, 06 Jul 2007 09:16:57 GMT]]></title><description><![CDATA[<p>das typedef schreibt nur die signatur der serialisierungsmethode vor, die dem konstruktur der calculation klasse übergeben wird. damit kann vom anderer selbst bestimmt werden, wie die daten eines objekts im xml dargestellt werden sollen. meines wissens ist eine automatische serialisierung in c++ ja nicht möglich, selbst nicht auf objektbasis. So etwas ist mir eher aus dem java umfeld bekannt.</p>
<p>Vielen dank schon mal für die hilfestellung. ich werde mich gleich einmal daran versuchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1319509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1319509</guid><dc:creator><![CDATA[c++ nope]]></dc:creator><pubDate>Fri, 06 Jul 2007 09:16:57 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und statische Funktionen on Fri, 06 Jul 2007 09:46:26 GMT]]></title><description><![CDATA[<p>Da wundert mich aber, daß der typedef durch den Compiler kommt - eine Funktion ist kein Typ (ein Funktionspointer schon - und afaik müsstest du auch einen Funktionszeiger dort verwenden: <code>typedef strind (*serialize)(const T&amp;);</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1319536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1319536</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 06 Jul 2007 09:46:26 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und statische Funktionen on Sat, 07 Jul 2007 04:27:37 GMT]]></title><description><![CDATA[<p>Eine Funktion ist kein Typ, hat aber einen Typ.<br />
Typedefs auf Funktionstypen funktionieren wunderbar, und sind AFAIK auch legales C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1320046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1320046</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 07 Jul 2007 04:27:37 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und statische Funktionen on Sat, 07 Jul 2007 05:41:28 GMT]]></title><description><![CDATA[<p>Ausdrücke mit dem Typ einer Funktion entstehen eigentliche bei fast jedem Funktionsaufruf. Ähnlich wie Arrays zerfallen sie allerdings beim geringsten Anzeichen von Gefahr in Pointer auf Funktionen - lediglich bei Anwendung der Adressoperators &amp; und des Funktionsaufrufoperators () ist das nicht der Fall.</p>
<p>typedefs für Funktionstypen sind legal und können benutzt werden, um Funktionen zu deklarieren, nicht aber, um sie zu definieren.</p>
<pre><code class="language-cpp">typedef int foo(int);
foo bar1; // Deklariert die Funktion int bar1(int)
struct X
{
    foo bar2; // Deklariert die nicht-statische Funktion int X::bar2(int); - Der Typ von bar2 ist eigentlich nicht foo... aber gewisse Inkonsistenzen gehören bei C++ dazu,
              // es gibt allerdings auch keine typedefs für nicht-statische Memberfunktionen
// aber nicht:
    const foo bar4; // illegal, ist nicht equivalent zu int X::bar3(int) const; - Comeau bringt hier nur eine Warnung, es ist aber nicht zulässig [8.3.5/4]
};
</code></pre>
<p>Funktionstypen sind niemals cv-qualifiziert, deshalb ist die Deklaration</p>
<pre><code class="language-cpp">Calculation(const serialize*);
</code></pre>
<p>feherhaft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1320051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1320051</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 07 Jul 2007 05:41:28 GMT</pubDate></item></channel></rss>