我知道,因为C不是面向对象的,所以最接近方法的是在结构中使用函数指针.这只是一个思考练习,但有可能:
list.add(void* data)
Run Code Online (Sandbox Code Playgroud)
没有将列表本身作为参数传递?
我知道:
list.add(list_t* list, void* data)
Run Code Online (Sandbox Code Playgroud)
很容易实现,但有什么办法,使用C的任何部分,以这种方式模拟方法?
我知道答案可能是肯定的,但如果可以,请向我解释!谢谢.
这是我使用可变参数宏(C99)获得的最漂亮的语法:
#define call(obj, method, ...) ((obj).method(&(obj), __VA_ARGS__))
Run Code Online (Sandbox Code Playgroud)
struct class {
int a;
int (*method)(struct class* this, int b, int c);
};
int code(struct class* this, int b, int c) {
return this->a*b+c;
}
struct class constructor(int a) {
struct class result = {a, code};
return result;
}
#define call(obj, method, ...) ((obj).method(&(obj), __VA_ARGS__))
#include <stdio.h>
int main() {
struct class obj = constructor(10);
int result = call(obj, method, 2, 3);
printf("%d\n", result);
return 0;
}
Run Code Online (Sandbox Code Playgroud)