gpt4 book ai didi

c - 如何在c中创建链式函数?

转载 作者:行者123 更新时间:2023-11-30 18:45:15 27 4
gpt4 key购买 nike

在 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);

}

最佳答案

你真的确定你想要这个吗?

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;
}

但是您无法绑定(bind)任何参数,因此 function2 无法与 function 操作同一对象,除非您再次传递它。

如果您愿意深入研究一点汇编,您可以通过将函数体写入结构来完成这项工作。不要这样做。维护程序员会恨你的。

关于c - 如何在c中创建链式函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55286110/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com