Как сделать цепочки функций в c? - PullRequest
0 голосов
/ 21 марта 2019

В c ++ вы можете связывать функции в цепочку, возвращая ссылку на объект, например function1().function2().function3().

Есть ли способ сделать это в c? может быть, с помощью указателей на функции? Я сделал небольшой пример, это был единственный способ, о котором я мог думать.

#include <stdio.h>
#include <stdlib.h>

struct date
{
    unsigned day;
    struct date *(*func_print)(struct date*);
     struct date *(*func_assign)(struct date*,unsigned);
};

struct date *create_date(void)
{
    struct date *obj = malloc(sizeof(struct date));
    return obj ? obj : NULL;
}

struct date *assign(struct date *this, unsigned value){
    this->day = value;
    return this;
}
struct date* print(struct date *this){
    printf("%d\n",this->day);
    return this;
}

int main()
{
    struct date *my = create_date();    
    my->func_print = print;
    my->func_assign = assign;
    my->func_assign(my,20)->func_print(my);

    free(my);

}

1 Ответ

2 голосов
/ 21 марта 2019

Вы действительно уверены, что хотите этого?

struct decl1 {
    struct decl2 (*function2)();
};

struct decl2 {
    struct decl3 (*function3)();
};

void function3()
{
}

struct decl2 function2()
{
    // ...
    struct decl2 one { function3 };
    return one;
}

struct decl1 function1()
{
    // ...
    struct decl1 one { function2 };
    return one;
}

Но вы не можете связать какие-либо аргументы, поэтому function2 не может работать с тем же объектом, что и function, если вы не передадите его снова.

Если вы хотите немного погрузиться в сборку, вы можете выполнить эту работу, записав функциональные тела в структуры. Не делай этого. Программист будет ненавидеть тебя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...