Hilfe für "simulierte" OOP/Funktionale Programmierung



  • Hallo allerseits!

    Ich versuche gerade ein wenig OOP (und eigentlich Funktionale Programmierung) in C einzubauen. Mein Ziel fürs erste ist ein Struktur die aus einem Integer Array besteht und einigen function pointers.
    Zuerst möchte ich den Befehl append(x) einbauen, der das Array um eins vergrößert und an die letzte Stelle ein x hängt.

    So ist mein vorläufiger Aufbau:

    struct Deklaration:

    typedef struct
    {
      int *list_;
      int list_length_;
      int to_append_;
    
      void (*append)(int x);
    }List;
    

    Die append() Funktion:

    void append(int *list, int *list_length, int x)
    {
      list=realloc(list, (1+*list_length)*sizeof(int)+1);
      list[*list_length+1]=x;
      *list_length=*list_length+1;  
    }
    

    Die Funktion zum Initialisieren:

    List *init()
    {
      List *return_list=malloc(sizeof(List)+1);
      return_list->list_length_=1;
      return_list->list_=malloc(sizeof(int)+1);
      return_list->list_[0]=0;
    
      return_list->append(int x)=append(return_list->list_,&(return_list->list_length_),x);
      // ???
      return return_list;
    }
    

    Das ganze sollte in der main() dann so verwendet werden:

    List *test=init();
    test->append(1337);
    

    Wie man sieht (und ich jetzt auch schon seit einiger Zeit probiert habe) kann das nicht funktionieren. Ich weiss es wäre möglich eine List als Funktionsparameter zu übergeben aber das möchte ich sofern es nicht anders geht aus optischen Gründen nicht.
    Meine Frage ist also ob es möglich ist ohne Angabe von List als Parameter die Attribute einer List zu verändern?

    (Nur zur Erklärung warum das ganze: Ich möchte ein paar Funktionen aus funktionalen Programmiersprachen in C verwenden, z.B. append(), map(), ...)



  • Hi Bruder !
    Sowas macht man doch aber nicht mit realloc,
    wenn, dann verkette Liste !



  • er will wohl ein dyn. array statt list machen wollen;)

    EDIT: das was du vorhast ist so nicht machbar denk ich..

    Du musst schon die globale funktion mit einem Parmeneter (List*) und das neue element (int) ausstatten... undden funktionpointer in der structur vergessen


Anmelden zum Antworten