c语言链式编程

c语言链式编程

因为目前在玩rust,觉得rust的链式编程十分优雅,考虑c语言是否也可以优雅地进行链式编程。

头文件

#ifndef BUILDER_H
#define BUILDER_H

typedef struct Some
{

    int id;
    char *name;

} Some;



struct SomeBuilder
{

    struct SomeBuilder *(*new_)(Some **, int ,char*);
    struct SomeBuilder *(*change_id)(Some **, int);
    struct SomeBuilder *(*clear)(Some **);

} ;




#endif

实现文件

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "builder.h"




struct SomeBuilder * const  builder ;

static struct SomeBuilder *new_(Some **some, int id, char *name){


    *some = (Some*)malloc(sizeof(Some));
    (*some)->id = id;
    (*some)->name = (char*)malloc(sizeof(char[30]));
    strcpy((*some)->name,name);
    printf("Some创建成功\n");
    printf("id = %d \n",(*some)->id);
    printf("name = %s \n",(*some)->name);
    return builder;



};
static struct SomeBuilder *change_id(Some **some, int new_id){

    (*some)->id = new_id;
    printf("id修改成功\n");
    printf("new id = %d\n",(*some)->id);
    return builder;
    




};
static struct SomeBuilder *clear(Some **some){

    free((*some)->name);
    free(*some);
    printf("内存清理成功\n");
    return builder;





};
static struct SomeBuilder  Builder={new_,change_id,clear};
struct SomeBuilder  *const builder  = &Builder;

优雅地调用

#include "builder.h"


extern struct SomeBuilder *builder;
int main(){
    Some* a;
    builder->new_(&a,10,"hello world")
           ->change_id(&a,100)
           ->clear(&a);

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值