【发布时间】:2022-01-15 15:37:57
【问题描述】:
我只需要用 C 和 C 语言做一个大型项目,不需要外部库(SDL 除外)。 我开始寻找在 C 中做某种类的方法,是什么导致了我:
typedef void (*voidFunction)(void);
typedef struct{
int id;
voidFunction printId;
} Object;
Object *new_Object(int id){
Object *newObject = malloc(sizeof(Object));
newObject->id = id;
void printId(){
static Object *this = NULL;
if(!this) this = newObject;
printf("%d\n", this->id);
};
newObject->printId = printId;
return newObject;
}
int main(){
Object *object = new_Object(5);
object->printId();
object->id++;
object->printId();
return 0;
}
主输出:
5
6
所以这行得通,但它似乎合理吗? 如果我将这种架构用于大型项目,我是否应该期待反弹?也许我在不知不觉中输入了分配的内存?
【问题讨论】:
-
这对您有什么好处?类提供了很多特性,而这一切让你获得的只是方法调用的一种非常有限的方式。在 C 中重新发明类是丑陋的,而且写/读起来有点糟糕,所以首先要问的问题是:“我的伪类让我得到什么?值得丑陋吗?”
-
好吧,例如,我将有大量类似对象的属性,但显示方式却截然不同。这将使我能够对链表中的每个对象调用 object->render()。因为我的课程很少,但会经常使用和调用它们,所以我可以为我得到的抽象留一点丑陋。我的问题真的是:这是未来的段错误材料吗?
-
在
new_Object中定义一个嵌套函数只能通过编译器提供的扩展来实现。这不是标准的 C。