【发布时间】:2022-01-20 18:15:51
【问题描述】:
到目前为止,我已经使用了相当多的 JavaScript。如果您要在 JavaScript 中使用对象构造函数,则可以访问 this 构造函数。
所以我的问题与尝试在 C 中使用类似概念有关。我创建了一个我希望能够自我引用的结构:
struct Storage {
void (*delete)();
}
所以如果我要分配一个Storage 类:
struct Storage *myStruct = malloc(sizeof(struct Storage));
假设我正在尝试删除myStruct。如果我有一些我指向的delete 函数(使用myStruct->delete = deleteStructure),我想做这样的事情:
myStruct.delete();
然后将free() 结构通过所述delete 函数内部的自引用变量。我想知道是否有办法让delete 函数看起来像:
void deleteStructure() {
free( /* "this" or some equivalent C self-reference */ );
}
到目前为止,我的研究假设是这是不可能的,因为this 通常只在面向对象的编程语言中。如果这是不可能的,我想知道在语义上正确的方法是什么。我希望从用户界面的角度来看,这个delete 功能的使用相当简单。我理解这个工作的唯一方法是传递对结构的引用,例如:
void deleteStructure(struct Storage *someStructure) {
free(someStructure);
}
然后需要按如下方式进行删除:
deleteStructure(myStruct);
总结一下:有没有办法在 C 中创建一个使用自引用的删除函数,如果没有,在大多数用户中删除结构的最语义正确的方法是什么友好的方式?
【问题讨论】:
-
没有。 C 没有类。为此,我们有 C++。所以 struct 中没有函数,也没有“this”。
-
C 不会将任何隐式参数传递给函数,如果你想要一个
this那么它需要显式传递 -
@charlie-map 为什么选择 C 来解决这个问题?
-
@Heto 您绝对可以通过使用函数pointers 在结构中拥有函数。我怀疑会有一个“this”,但是我想知道用显式传入来编写对 UI 友好的东西的最佳方式。
-
“UI 友好”是什么意思?