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