Verzögerte Funktion



  • Hallo,

    neulich wollte ich den Aufruf von meheren Funktion verzögern. Um dies zu tun habe ich die Funktionsaddresse und die Argumente in ein vector geschrieben und bei Bedarf all Funktion im vector aufgerufen. Dies klappt sehr gut:

    class Action{
    public:
      virtual void do_action()=0;
      virtual ~Action(){}
    };
    void foo(){...}
    class DoFoo:public Action{
    public:
      void do_action(){foo();}
    };
    void foo2(int){...}
    class DoFoo2:public Action{ 
      int a;
    public:
      void do_action(){foo(a);}
      DoFoo2(int a_):a(a_){}
    };
    vector<Action*>funcs;
    void flush_funcs()
    {
      for(vector<Action*>::iterator i=funcs.begin();i!=funcs.end();++i)
      {
        (*i)->do_action();
        delete*i;
      }
      funcs.clear();
    }
    

    Dies klappt auch sehr gut, nur wiederhole ich immer den gleichen Code um die Klasse für jede Funktion zu schreiben.

    Wäre es irgendwie möglich dies hinter Templates zu verstecken?

    Bin für jeden Vorschlag dankbar. 🙂



  • Vielleicht hilft dir das ja weiter 😉

    http://cvs.sourceforge.net/viewcvs.py/loki-lib/loki/Reference/Functor.h?rev=1.5&view=auto

    #include "Functor.h"
    #include <iostream>
    using namespace std;
    
    // Define a test function
    void TestFunction(int i, double d)
    {
       cout << "TestFunction(" << i
          << ", " << d << ") called." << endl;
    }
    
    int main()
    {
       Functor<void, TYPELIST_2(int, double)> cmd(
          TestFunction);
       // will print: "TestFunction(4, 4.5) called."
       cmd(4, 4.5);
    }
    

    (aus Andrei Alexandrescu / Modern C++ Design)


Anmelden zum Antworten