Есть ли способ добиться закрытия в C

Я бы хотел, чтобы это работало, но это не так:

#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?

Это было бы поистине круто!

32
задан kristopolous 9 December 2010 в 00:21
поделиться