本文介绍了有没有一种方法来实现用C关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想这个工作,但它不会:
I would like this to work, but it does not:
#include <stdio.h>
typedef struct closure_s {
void (*incrementer) ();
void (*emitter) ();
} closure;
closure emit(int in) {
void incrementer() {
in++;
}
void emitter() {
printf("%d\n", in);
}
return (closure) {
incrementer,
emitter
};
}
main() {
closure test[] = {
emit(10),
emit(20)
};
test[0] . incrementer();
test[1] . incrementer();
test[0] . emitter();
test[1] . emitter();
}
实际上确实的编译和做工作,为1个实例...但第二个失败。任何想法如何让闭包用C?
It actually does compile and does work for 1 instance ... but the second one fails. Any idea how to get closures in C?
这将是真正真棒!
推荐答案
使用,
#include <callback.h>
#include <stdio.h>
static void incrementer_(int *in) {
++*in;
}
static void emitter_(int *in) {
printf("%d\n", *in);
}
int main() {
int in1 = 10, in2 = 20;
int (*incrementer1)() = alloc_callback(&incrememnter_, &in1);
int (*emitter1)() = alloc_callback(&emitter_, &in1);
int (*incrementer2)() = alloc_callback(&incrememnter_, &in2);
int (*emitter2)() = alloc_callback(&emitter_, &in2);
incrementer1();
incrementer2();
emitter1();
emitter2();
free_callback(incrementer1);
free_callback(incrementer2);
free_callback(emitter1);
free_callback(emitter2);
}
但通常使用C,你最终传递周围额外的参数,以假倒闭。
But usually in C you end up passing extra arguments around to fake closures.
苹果有一个非标准扩展到C称为,该做的工作就像倒闭。
Apple has a non-standard extension to C called blocks, which do work much like closures.
这篇关于有没有一种方法来实现用C关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!