<?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[Frage zur Umsetzung [Parser]]]></title><description><![CDATA[<p>Ich programmiere gerade eine Konsole und bin auf folgendes Problem beim Parser gestoßen:</p>
<p>Ich habe eine Klasse Command erstellt, die den Befehl und die zugehörige Funktion enthält:</p>
<pre><code class="language-cpp">class Command
{
private:
	basic_string&lt;wchar_t&gt;&amp; name_;
	void (*functionPointer)(void);

public:
	Command(void);
	~Command(void);

	Command&amp; operator =(const basic_string&lt;wchar_t&gt;&amp; name);
	Command&amp; operator =(void (*functionPointer)(void));

	// == --&gt; string und command!!!
	friend inline bool operator==(const Command&amp; cmdA, const Command&amp; cmdB);
	friend inline bool operator==(const basic_string&lt;wchar_t&gt;&amp; cmdA, const Command&amp; cmdB);

	bool execute(void) const;
};

inline bool operator==(const Command&amp; cmdA, const Command&amp; cmdB);
inline bool operator==(const basic_string&lt;wchar_t&gt;&amp; cmdA, const Command&amp; cmdB);
</code></pre>
<p>Das Problem ist nun folgendes:</p>
<pre><code class="language-cpp">void (*functionPointer)(void);
</code></pre>
<p>Die Parameter der Funktion sind nur Void, ich könnte zwar jetzt die Command Klasse mit Templates überladen, dass hilft mir aber ncith grade weiter. Was ist, wenn ich eine Funktion haben will, die n-Parameter, eines x-beliebigen Datentypes haben will?</p>
<p>wie: void</p>
<pre><code class="language-cpp">move(uint objID, float x, float y, float z);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/151024/frage-zur-umsetzung-parser</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 01:28:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/151024.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Jun 2006 13:01:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zur Umsetzung [Parser] on Thu, 22 Jun 2006 13:01:54 GMT]]></title><description><![CDATA[<p>Ich programmiere gerade eine Konsole und bin auf folgendes Problem beim Parser gestoßen:</p>
<p>Ich habe eine Klasse Command erstellt, die den Befehl und die zugehörige Funktion enthält:</p>
<pre><code class="language-cpp">class Command
{
private:
	basic_string&lt;wchar_t&gt;&amp; name_;
	void (*functionPointer)(void);

public:
	Command(void);
	~Command(void);

	Command&amp; operator =(const basic_string&lt;wchar_t&gt;&amp; name);
	Command&amp; operator =(void (*functionPointer)(void));

	// == --&gt; string und command!!!
	friend inline bool operator==(const Command&amp; cmdA, const Command&amp; cmdB);
	friend inline bool operator==(const basic_string&lt;wchar_t&gt;&amp; cmdA, const Command&amp; cmdB);

	bool execute(void) const;
};

inline bool operator==(const Command&amp; cmdA, const Command&amp; cmdB);
inline bool operator==(const basic_string&lt;wchar_t&gt;&amp; cmdA, const Command&amp; cmdB);
</code></pre>
<p>Das Problem ist nun folgendes:</p>
<pre><code class="language-cpp">void (*functionPointer)(void);
</code></pre>
<p>Die Parameter der Funktion sind nur Void, ich könnte zwar jetzt die Command Klasse mit Templates überladen, dass hilft mir aber ncith grade weiter. Was ist, wenn ich eine Funktion haben will, die n-Parameter, eines x-beliebigen Datentypes haben will?</p>
<p>wie: void</p>
<pre><code class="language-cpp">move(uint objID, float x, float y, float z);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1082932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1082932</guid><dc:creator><![CDATA[Tc++H]]></dc:creator><pubDate>Thu, 22 Jun 2006 13:01:54 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Umsetzung [Parser] on Thu, 22 Jun 2006 13:17:10 GMT]]></title><description><![CDATA[<p>dann benutz doch nen functor :).</p>
<p>btw: komisches klassendesign</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1082945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1082945</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 22 Jun 2006 13:17:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Umsetzung [Parser] on Thu, 22 Jun 2006 20:54:45 GMT]]></title><description><![CDATA[<p>functor?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1083406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1083406</guid><dc:creator><![CDATA[Tc++H]]></dc:creator><pubDate>Thu, 22 Jun 2006 20:54:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Umsetzung [Parser] on Thu, 22 Jun 2006 23:10:32 GMT]]></title><description><![CDATA[<p>Tc++H schrieb:</p>
<blockquote>
<p>functor?</p>
</blockquote>
<p>generische Module</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1083466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1083466</guid><dc:creator><![CDATA[Christoph K.]]></dc:creator><pubDate>Thu, 22 Jun 2006 23:10:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Umsetzung [Parser] on Fri, 23 Jun 2006 07:43:41 GMT]]></title><description><![CDATA[<p>Tc++H schrieb:</p>
<blockquote>
<p>functor?</p>
</blockquote>
<p>Wikipedia</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1083568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1083568</guid><dc:creator><![CDATA[functor]]></dc:creator><pubDate>Fri, 23 Jun 2006 07:43:41 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Umsetzung [Parser] on Fri, 23 Jun 2006 08:02:04 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ein Functor ist ein Objekt einer Klasse die den Funktionsoperator operator() überlädt. Der entscheidene Vorteil eines Funktors gegenüber einer Funktion (bzw. eines Funktionszeigers) ist der, dass ein Funktor, da es sich ja um ein Objekt handelt, beliebigen Zustand mit sich rumschleppen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1083580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1083580</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 23 Jun 2006 08:02:04 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Umsetzung [Parser] on Fri, 23 Jun 2006 08:13:46 GMT]]></title><description><![CDATA[<p>ich finde die folgende Methode sehr nutzbar und hab sie schon mehr mals in unterschidlichen Projecten verwendet.</p>
<pre><code class="language-cpp">class ICommand
{
public:
	virtual void Do() = 0;
	virtual void Undo() = 0;
	virtual void Redo() = 0;
};

class ICommandProcessor
{
public:
	virtual execute(ICommand *cmd) = 0;
	virtual process(ICommand *cmd) = 0;
};

class InsertText : public ICommand
{
public:
	InsertText(ITextStory *story, TextIndex position, std::wstring &amp;text);
};

class DeleteText : public ICommand
{
	DeleteText(ITextStory *story, const TextRange &amp;range);
};

ICommand *insertTextCmd(ITextStory *story, TextIndex position, std::wstring &amp;text)
{
	return new InsertText(story, position, text);
}

ICommand *deleteTextCmd(ITextStory *story, const TextRange &amp;range)
{
	return new DeleteText(story, range);
}

int main()
{
	smatr_ptr&lt;ICommandProcessor&gt; cmdProc(...);

	smatr_ptr&lt;ICommandSequence&gt; cmdSeq(...);

	try
	{
		cmdProc-&gt;process(insertTextCmd(
			textModel, 11, &quot;aaaaaaaaabbbbbbccccc&quot;)));

		cmdProc-&gt;process(deleteTextCmd(
			textModel, TextRange(0, 23)));

		cmdSec-&gt;Commit();
	}
	catch(std::exception &amp;e)
	{
		cmdSec-&gt;Abort();
		//...
	}

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1083584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1083584</guid><dc:creator><![CDATA[ssm]]></dc:creator><pubDate>Fri, 23 Jun 2006 08:13:46 GMT</pubDate></item></channel></rss>