Voids in Strukturen



  • Hi, ich wollte fragen, ob man in eine Struktur eine Void hineinmachen kann, sodass man z.B. struct a; a.write(); schreiben kann und sich damit Pseudo-Objekte macht..

    Wenn ja, kann das einer bitte ein wenig erläutern?



  • voids?

    Meine Glaskugel sagt, dass du Funktionen meinst. Du kannst Funktionszeiger in Strukturen packen und die dann genau mit der Syntax a.f() aufrufen.



  • Also hätte man sich damit kleine Klassen gebastelt? 😮

    Wie sieht denn so eine Struktur aus?



  • Du meinst wohl sowas:

    void myMethod() {
       printf("moep");
    }
    
    typedef void (*fp)();
    
    struct foo {
       fp method;
    };
    
    // ...
    struct foo f;
    f.method = myMethod;
    f.method();
    

    Aber das wird dir so nichts bringen, da die Funktion keinen Bezug zu einem Objekt und seinen Daten hat.



  • huhu1 schrieb:

    Also hätte man sich damit kleine Klassen gebastelt? 😮

    Wie sieht denn so eine Struktur aus?

    so wie this->that geschrieben hat, du musst aber das Objekt immer mitangeben, eine implizite Übergeben gibt es wie bei C++ nicht.

    #include <stdio.h>
    
    struct mystr
    {
        char str[1024];
        int (*print)(struct mystr *, size_t);
        void (*copy)(struct mystr *, const char*);
    };
    
    void copy_str(struct mystr *this, const char *src)
    {
        strncpy(this->str, src, 1024);
        this->str[1023] = 0;
    }
    
    int print_str(struct mystr *this, size_t howmany)
    {
        int x = 0, j;
        for(j = 0; j < howmany; ++j)
            x += printf("%s", this->str);
    
        return x;
    }
    
    int main(void)
    {
        struct my_str string;
    
        string.print = print_str;
        string.copy = copy_str;
    
        string.copy(&string, "Hello World\n");
        string.print(&string, 3);
    
        return 0;
    }
    

Anmelden zum Antworten