看了下你的源代码,写的很好,但是没有体现面向对象的思想,C为什么要面向对象?Linux内核就是最好的例子,Linux内核尽管是C和汇编写的,但是里面却大量使用了面向对象的思想,要不然它的代码怎么会写的如此精妙,同一份源代码能够支持几十种架构
另外你的API应该和C++ STL要类似,这样可以减少开发者的学习成本和更方便的使用,比如说C++的list里有哪些方法,你的libcstl应该提供对应的方法
之前我自己也封装过,但是对于自定义的类型处理不好,所以弃坑了......
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// list简单封装...
typedef void* Type;
typedef struct Node{
int data;
struct Node *next;
struct Node *prev;
}Node;
// 把所有的方法都封装在list里面,类似于class
typedef struct list{
void (*add) (Node *head,int data);
void (*insert) (Node *head,int data,int pos);
bool (*empty) (Node *head);
// ...
}list;
void list_add(Node *head,int data){
printf("data = %d\n",data);
}
bool list_empty(Node *head){
printf("list is empty...\n");
return false;
}
// 这个方法返回的是一个list结构体
list create_list(Type T){
list m_list = {
.add = list_add,
.empty = list_empty
};
// 进行链表的一些初始化,构造头节点...
// ...
return m_list;
}
// 这个方法返回的是一个list结构体指针,类似于C++的new
list* new_list(Type T){
list p_list = (list)malloc(sizeof(list));
p_list->add = list_add;
p_list->empty = list_empty;
// 进行链表的一些初始化,构造头节点...
// ...
return p_list;
}
/* main function */
int main(int argc,char **argv){
// 构造list对象,通过对象调用方法,这样就可以达到类似面向对象的效果
list mlist = create_list(NULL);
mlist.add(NULL,666);
list *plist = new_list(NULL);
plist->empty(NULL);
return 0;
}
看了下你的源代码,写的很好,但是没有体现面向对象的思想,C为什么要面向对象?Linux内核就是最好的例子,Linux内核尽管是C和汇编写的,但是里面却大量使用了面向对象的思想,要不然它的代码怎么会写的如此精妙,同一份源代码能够支持几十种架构
另外你的API应该和C++ STL要类似,这样可以减少开发者的学习成本和更方便的使用,比如说C++的list里有哪些方法,你的libcstl应该提供对应的方法
之前我自己也封装过,但是对于自定义的类型处理不好,所以弃坑了......
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// list简单封装...
typedef void* Type;
typedef struct Node{
int data;
struct Node *next;
struct Node *prev;
}Node;
// 把所有的方法都封装在list里面,类似于class
typedef struct list{
void (*add) (Node *head,int data);
void (*insert) (Node *head,int data,int pos);
bool (*empty) (Node *head);
// ...
}list;
void list_add(Node *head,int data){
printf("data = %d\n",data);
}
bool list_empty(Node *head){
printf("list is empty...\n");
return false;
}
// 这个方法返回的是一个list结构体
list create_list(Type T){
list m_list = {
.add = list_add,
.empty = list_empty
};
// 进行链表的一些初始化,构造头节点...
// ...
return m_list;
}
// 这个方法返回的是一个list结构体指针,类似于C++的new
list* new_list(Type T){
list p_list = (list)malloc(sizeof(list));
p_list->add = list_add;
p_list->empty = list_empty;
// 进行链表的一些初始化,构造头节点...
// ...
return p_list;
}
/* main function */
int main(int argc,char **argv){
// 构造list对象,通过对象调用方法,这样就可以达到类似面向对象的效果
list mlist = create_list(NULL);
mlist.add(NULL,666);
}