<?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[Programmcode in Variable speichern&#x2F;übergeben?]]></title><description><![CDATA[<p>Guten Tag zusammen!</p>
<p>Ich würde gerne eine Klasse erzeigen, die ein paar Eingabe kontrolliert, und wenn diese richtig sind einen Code ausführt. Allerdings soll dieser Code nicht in der Klasse sein, sondern per Parameter übergebe werden.<br />
Ist soetwas irgendwie möglich?<br />
Ich hoffe ihr versteht, was ich meine und könnt mir helfen.</p>
<pre><code>class TestKlasse
{
public:
 int x;
 code Code;

private:
 TestKlasse(int x, code Code)
 {
  if(x &gt;= 5)
   code;
 }
};

main
{
 TestKlasse tk1(7 ,printf(&quot;größer als Fünf&quot;));
 TestKlasse tk2(2 ,while(1){printf(&quot;Test&quot;)});
 TestKlasse t3(0 , if(x==2){Funktion();};
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/260686/programmcode-in-variable-speichern-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 23:34:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/260686.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 Feb 2010 14:03:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programmcode in Variable speichern&#x2F;übergeben? on Mon, 08 Feb 2010 14:03:23 GMT]]></title><description><![CDATA[<p>Guten Tag zusammen!</p>
<p>Ich würde gerne eine Klasse erzeigen, die ein paar Eingabe kontrolliert, und wenn diese richtig sind einen Code ausführt. Allerdings soll dieser Code nicht in der Klasse sein, sondern per Parameter übergebe werden.<br />
Ist soetwas irgendwie möglich?<br />
Ich hoffe ihr versteht, was ich meine und könnt mir helfen.</p>
<pre><code>class TestKlasse
{
public:
 int x;
 code Code;

private:
 TestKlasse(int x, code Code)
 {
  if(x &gt;= 5)
   code;
 }
};

main
{
 TestKlasse tk1(7 ,printf(&quot;größer als Fünf&quot;));
 TestKlasse tk2(2 ,while(1){printf(&quot;Test&quot;)});
 TestKlasse t3(0 , if(x==2){Funktion();};
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1852429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852429</guid><dc:creator><![CDATA[Verim]]></dc:creator><pubDate>Mon, 08 Feb 2010 14:03:23 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode in Variable speichern&#x2F;übergeben? on Mon, 08 Feb 2010 14:04:55 GMT]]></title><description><![CDATA[<p>Ein paar Stichwörter für Google: Makros, eklige Programmierung, schlecht wartbarer Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852431</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Mon, 08 Feb 2010 14:04:55 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode in Variable speichern&#x2F;übergeben? on Mon, 08 Feb 2010 14:11:03 GMT]]></title><description><![CDATA[<p>Sowas?</p>
<pre><code class="language-cpp">void (*funcPtr)();
class TestKlasse
{
public:
 int x;
 code Code;

private:
 TestKlasse(int x, funcPtr)
 {
  if(x &gt;= 5)
   funcPtr();
 }
};

void printFunc()
{
    printf(&quot;größer als Fünf&quot;);
}

void whileFunc()
{
    while(1) {
        printf(&quot;Test&quot;);
    }
}

main
{
 TestKlasse tk1(7 , printFunc);
 TestKlasse tk2(2 , whileFunc);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1852435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852435</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Mon, 08 Feb 2010 14:11:03 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode in Variable speichern&#x2F;übergeben? on Mon, 08 Feb 2010 14:11:04 GMT]]></title><description><![CDATA[<p>Mit einem C++0x-fähigen Compiler (C++0x ist der neueste C++ Standard), sieht das so aus:</p>
<pre><code class="language-cpp">#include &lt;functional&gt;

class TestKlasse
{
public:
 TestKlasse(int x, const std::function&lt;void()&gt;&amp; code )
 {
  if(x &gt;= 5)
   code();
 }
};

main
{
 TestKlasse tk1(7 ,[](){printf(&quot;größer als Fünf&quot;)} );
 TestKlasse tk2(2 ,[](){while(1){printf(&quot;Test&quot;)}} );
 TestKlasse t3(0 , [](){if(x==2){Funktion();} } );
}
</code></pre>
<p>Siehe auch den Artikel zu C++0x im Magazin (da steht glaubich noch C++09).</p>
<p>Ahja, GCC 4.3 bzw MSVC++ 2010 können das.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852436</guid><dc:creator><![CDATA[Badestrand_]]></dc:creator><pubDate>Mon, 08 Feb 2010 14:11:04 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode in Variable speichern&#x2F;übergeben? on Mon, 08 Feb 2010 14:14:46 GMT]]></title><description><![CDATA[<p>BTW: wenn man einen Compiler hat der <em>keine</em> Lambda-Expressions kann, kann man immer noch einiges mit Boost.Bind und Boost.Lambda machen. Ist zwar einigermassen hässlich und schwer verständlich, aber geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852439</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 08 Feb 2010 14:14:46 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode in Variable speichern&#x2F;übergeben? on Mon, 08 Feb 2010 14:33:31 GMT]]></title><description><![CDATA[<p>So schlimm ist das ja nun wirklich nicht, Fellhuhn. Nur weil der OP gruseligen Code postet heisst das ja nicht, dass es keine elegante Lösung dafür gibt.</p>
<pre><code class="language-cpp">#include &lt;map&gt;
#include &lt;iostream&gt;
#include &lt;boost/smart_ptr.hpp&gt;

// abstrakte Basisklasse für alle Actions
class IAction
{
public:
   virtual ~IAction();

   // abgeleitete Klassen implentieren execute() mit sinnvollem Code
   virtual void execute() = 0;
};

// Typdefinition für shared_ptr, können auch TR1::shared_ptr sein
typedef boost::shared_ptr&lt;IAction&gt; ActionPtr_t;

// Konkrete Action Klasse 1
class ActionOne : public IAction
{
public:
   static const unsigned int ID = 0;

   void execute()
   {
      // Verhalten von Action One
      std::cout &lt;&lt; &quot;Action one&quot;;
   }
};

// Konkrete Action Klasse 1
class ActionTwo : public IAction
{
public:
   static const unsigned int ID = 1;

   void execute()
   {
      // Verhalten von Action Two
      std::cout &lt;&lt; &quot;Action two&quot;;
   }
};

// Action, die einfach nix tut
class NullAction : public IAction
{
public:
   void execute()
   {
      // NullAction macht nix
   }
};

// Funktionen zum Erzeugen konkreter Action Objekte
ActionPtr_t create_action_1()
{
   // neues ActionOne Objekt in shared_ptr verkapseln und zurückgeben
   return ActionPtr_t( new ActionOne() );
}

ActionPtr_t create_action_2()
{
   // neues ActionTwo Objekt in shared_ptr verkapseln und zurückgeben
   return ActionPtr_t( new ActionTwo() );
}

// Action Factory zum Erzeugen konkrete Action Objekte
class ActionFactory
{
   // Typdefinition für Funktionspointer
   typedef ActionPtr_t (*func)(void);
   typedef std::map&lt;unsigned int, func&gt; ActionCreatorMap_t;

   // Map mit Zuordnung ActionID -&gt; Erzeugerfunktion
   ActionCreatorMap    CreatorMap_; 

public:
   // Implementation als Singleton
   static const ActionFactory&amp; instance()
   {
      // das einzige Factory Objekt
      static ActionFactory theFactory;
      return theFactory;
   }

   ActionPtr_t create( unsigned int ActionID ) const
   {
      ActionCreatorMap::const_iterator it = CreatorMap_.find( ActionID );
      if( CreatorMap_.end() != it )
      {
         // Eintrag für übergebene Funktion gefunden, Funktion erzeugt Action
         return it-&gt;second();
      }
      // kein Treffer für übergebene ID, NullAction zurückgeben
      return ActionPtr_t( new NullAction() ); 
   }

private:
   ActionFactory()
   {
      // Erzeugerfunktionen unter ihrer ID in map eintragen
      CreatorMap_[ActionOne::ID] = create_action_1;
      CreatorMap_[ActionTwo::ID] = create_action_2;
   }
   // keine Kopien erlauben, CCtor und Assignment privat
   ActionFactory::ActionFactory( const ActionFactory&amp; );
   ActionFactory&amp; operator=( const ActionFactory&amp; );
};

int main()
{
   // Action 1, Action 2 und ungültige ID ausführen
   ActionFactory::instance().create( ActionOne::ID )-&gt;execute();
   ActionFactory::instance().create( ActionTwo::ID )-&gt;execute();
   ActionFactory::instance().create( 400 )-&gt;execute();
}
</code></pre>
<p>Code ist nicht getestet, dient lediglich zur Veranschaulichung der Idee</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852464</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 08 Feb 2010 14:33:31 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode in Variable speichern&#x2F;übergeben? on Mon, 08 Feb 2010 14:34:32 GMT]]></title><description><![CDATA[<p>... und ist häßlich, unübersichtlich, beschissen zu warten und umständlich. Meine bescheidene Meinung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852466</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Mon, 08 Feb 2010 14:34:32 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode in Variable speichern&#x2F;übergeben? on Mon, 08 Feb 2010 15:03:29 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>... und ist häßlich, unübersichtlich, beschissen zu warten und umständlich. Meine bescheidene Meinung.</p>
</blockquote>
<p>Argumente? Oder nur subjektiv?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852492</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 08 Feb 2010 15:03:29 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode in Variable speichern&#x2F;übergeben? on Mon, 08 Feb 2010 15:18:10 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18927">@DocShoe</a>:<br />
Ich verstehe nicht, wieso du nicht gleich boost::function verwendest.<br />
Wozu das eigene Interface?<br />
Macht ja hier genau gar keinen Sinn.</p>
<p>p.S.: vielleicht damit du eine Singleton-Klasse mit all ihren Problemen (z.B. mit vielen Compilern nicht threadsafe) einführen kannst, die man sonst nicht bräuchte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852501</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 08 Feb 2010 15:18:10 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode in Variable speichern&#x2F;übergeben? on Mon, 08 Feb 2010 15:19:43 GMT]]></title><description><![CDATA[<p>Da muss ich allerdings gestehen, dass ich bisher noch nie was mit boost::function gemacht habe. Kann sein, dass ich da bisher noch nie drauf gestossen bin oder dass mein Compiler die lib nicht unterstützt.<br />
In meinen Projekten hatte ich bisher immer einen Kontext und etwas komplexere Action Objekte, die dann einen Kontext hatten, der im Konstruktor übergeben wurde und als member gehalten wurde. Bei freien Funktionen hätte man diesen Kontext dann immer mitschleppen müssen, daher habe ich mich für Interfaces entschieden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852507</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 08 Feb 2010 15:19:43 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode in Variable speichern&#x2F;übergeben? on Mon, 08 Feb 2010 15:51:54 GMT]]></title><description><![CDATA[<p>Badestrand_ schrieb:</p>
<blockquote>
<p>Ahja, GCC 4.3 bzw MSVC++ 2010 können das.</p>
</blockquote>
<p>Woher hast du die Info das GCC 4.3 Lambda's kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852537</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 08 Feb 2010 15:51:54 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode in Variable speichern&#x2F;übergeben? on Mon, 08 Feb 2010 15:56:57 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18927">@DocShoe</a>:<br />
boost::function Objekte können auch State halten.</p>
<p>Idealerweise vermeidet man das wenn es geht. Aber das hat natürlich nichts mit boost::function zu tun, sondern eher damit, dass stateless &quot;immer&quot; besser ist als &quot;stateful&quot;. Gerade bei Funktoren.</p>
<p>boost::function hat allerdings - wenn ich mich richtig erinnere - &quot;value semantics&quot;, d.h. das darin verpackte Funktions-Objekt wird bei Zuweisung kopiert und nicht referenziert. Was man allerdings wieder schön mit shared_ptr umgehen kann.</p>
<p>Nochwas: wenn man Templates verwenden kann, braucht man natürlich gar kein boost::function/std::function/was-auch-immer, sondern kann den Funktor einfach als beliebigen Typ übergeben:</p>
<pre><code class="language-cpp">class Foo
{
public:
    template &lt;class Functor&gt;
    Foo(..., Functor functor)
    {
        ...
        functor(123,456);
    }
};
</code></pre>
<p>Spart wieder ein wenig Overhead ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852538</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 08 Feb 2010 15:56:57 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode in Variable speichern&#x2F;übergeben? on Mon, 08 Feb 2010 15:59:08 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>Badestrand_ schrieb:</p>
<blockquote>
<p>Ahja, GCC 4.3 bzw MSVC++ 2010 können das.</p>
</blockquote>
<p>Woher hast du die Info das GCC 4.3 Lambda's kann?</p>
</blockquote>
<p>Kann laut <a href="http://gcc.gnu.org/projects/cxx0x.html" rel="nofollow">http://gcc.gnu.org/projects/cxx0x.html</a> erst GCC 4.5</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852541</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 08 Feb 2010 15:59:08 GMT</pubDate></item></channel></rss>