不过,有没有让这个Lambda的编译一部分在编译期完成呢?运行时传参数进去就可以。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int(returns_int_f)();
static returns_int_f* returns_int_lambda(char *source) {
FILE *fp = popen("gcc -Wall -Werror -c -x c - -o ./wee", "w");
const int magic_offset = 0x34;
fwrite(source, 1, strlen(source), fp);
fprintf(fp, "\n");
fclose(fp);
fp = fopen("wee", "r");
long binlength;
fseek(fp, 0, SEEK_END);
binlength = ftell(fp) - magic_offset;
fseek(fp, magic_offset, SEEK_SET);
char *binbuf = malloc(binlength);
fread(binbuf, 1, binlength, fp);
fclose(fp);
return (returns_int_f *) binbuf;
}
int main() {
returns_int_f *times2 = returns_int_lambda("int f(x) { return x * 2; }");
int answer = (*times2)(55);
printf("answer is %d\n", answer);
}
--
新的理论从少数人的主张到一统天下,并不是因为这个理论说服了别人抛弃旧观点,而是因为一代人的逝去。
My blog: http://googollee.blog.163.com
在 07-12-13,shark<cplus...@gmail.com> 写道:
设想当年Java出现的各种各样的class manipulator库和Java6引入的Compiler
API就知道:有时候增加一个自足的层次环极大的简化了抽象的进行。