Joel Reymont <joe...@gmail.com> writes:

> Suppose I have a C++ class with a bunch of methods that act as callbacks.
>
> My callbacks will be hit if I derive the class and implement the
> methods I'm interested in.
>
> Now, I would like to wrap this class from OCaml.
>
> This is straightforward from using OCaml classes (section 18.3.5 of
> the manual) but is there a way to implement this using modules?
>
> I don't think this is possible but would like to confirm.
>
>     Thanks, Joel

>From the top of my head:

module M = struct
  type t
  external foo : t -> unit = "caml_mine_M_foo"
end


class M {
  void foo(void) { }
};

value caml_mine_M_foo(value ml_m) {
  CAMLparam1(ml_m);
  M *m = (M*)ml_m;
  m->foo();
  CAMLreturn Val_unit;
}

Wouldn't that do?

It gets harder with inheritance, when you have modules A, B, C for the
different classes and want to be able to pass a C.t to a function
expecting a B.t. You will need to declare a C.as_b function and such.

MfG
        Goswin

-- 
Caml-list mailing list.  Subscription management and archives:
https://sympa-roc.inria.fr/wws/info/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Reply via email to