【发布时间】:2014-01-31 21:28:28
【问题描述】:
函数可以通过函数指针耦合到它们的引用结构。
struct string
{
char *value;
size_t (*size)(struct string *);
};
size_t size(struct string *this)
{
size_t i;
for(i = 0; this->value[i] != '\0'; ++i);
return i;
}
struct string *construct()
{
string this = (string)malloc(sizeof(struct string));
this.size = &size;
// ...
}
int main()
{
struct string *s = construct();
// ...
s->size(s); // explicitly pass self reference
}
但我想摆脱手动传递this 指针。我知道当您调用对象的方法时,这是在 C++ 中隐式完成的。有没有办法在 C 中为此创建一个适用于所有方法和签名的宏?
例如,我可以想到这样的语法。
s=>size(); // implicitly pass self reference
请注意,这仅用于学习目的。我知道如果可能的话,最好只使用 C++,并且你想使用类耦合。但我对如何在 C 中完成它很感兴趣。
【问题讨论】:
-
我认为
CALL_METHOD(s, size)太丑了,无法改进? -
CALLMETHOD(objectref,methodname,otherargs) 当然可以,但是如果不对代码的外观进行一些类似的更改,我想不出任何方法。
-
@delnan 好吧,我不知道。所以这是不可能的。
-
我的意思是,你可以使用 C++... ;-)
-
@immibis 这是一个“有可能吗?”问题,而不是“如何做到最好?”一。正如我已经说过的,仅用于学习目的。
标签: c class methods macros function-pointers