我已经用了 3 天的时间来学习 Learn C The Hard Way 的练习 19,但我并没有真正理解它。如果没有在 main 函数中调用,为什么需要 void *self 例如:
int Monster_attack(void *self, int damage)
{
Monster *monster = self;
printf("You attack %s!\n", monster->_(description));
etc....
etc....
}
在所有文件中我没有看到它在我只看到的主函数中被调用
Map *game = NEW(Map, "The Hall of the Minotaur.");
声明后self指针会自动带上Object吗? 例如:
Object object;
在实现中指向函数的指针会自动执行此操作?
int Monster_attack(object, some_integer);
源代码是here
我对我的语法感到抱歉,因为英语不是我的母语,我希望它足够清楚。
最佳答案
他们正在使用 void*
来模拟对象。
在 C++ 中,您将声明 attack()
作为类的成员函数 Monster
然后这样调用它:myMonster.attack(damage);
在 C 中,由于我们没有类,它们通过使用一个额外的参数来模拟类,以传递对保存对象状态的结构的引用:
Monster_attack(myMonster, damage);
所以 void *self
是指向结构的指针,该结构包含适当类型的对象(结构)的成员变量。
为了使成员函数易于识别,它们使用命名约定 <class>_<function>(void* self, ...)
.
关于c - 似乎没有调用 ex19 Learn C The Hard Way 中的 void *self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25741253/