From: Felipe M. de A. <fel...@gm...> - 2013-06-18 04:00:16
|
On Tue, Jun 18, 2013 at 1:39 AM, Cedric BAIL <ced...@fr...> wrote: > Hello, Hello, > That is a really interesting idea. Why not just play with undefining > EO_TYPECHECK in your case ? I like the trick of reusing cpp to > generate binding. I am not sure how to use it in other case than C++, > but worth thinking about it. As a proof of concept, this runs: #include <eflcxx/eo/eo_class_test.hpp> #include <Elementary.h> #undef EO_TYPECHECK #define EO_TYPECHECK(TYPE, ARG) TYPE EFLCXX_EO_CLASS_C (evas_object // class name , regular // regular type , :: EVAS_OBJ_CLASS , evas_obj_ // prefix , (position_set, 2) (size_set, 2) (visibility_set, 1) , () // constructors (TODO) , () // bases ) EFLCXX_EO_CLASS_C (window // class name , regular // regular type , :: ELM_OBJ_WIN_CLASS , elm_obj_win_ // prefix , (title_set, 1) , () // constructors (TODO) , (evas_object) // bases ) #undef EO_TYPECHECK #define EO_TYPECHECK(type, x) \ ({ \ type __x; \ __x = x; \ (type) __x; \ }) static void on_done(void *data, Evas_Object *obj, void *event_info) { std::cout << "on_done " << std::endl; elm_exit(); } int main(int argc, char* argv[]) { ::elm_init(argc, argv); window win ( eo_add_custom(ELM_OBJ_WIN_CLASS, NULL, elm_obj_win_constructor("Name", ELM_WIN_BASIC)) ); win.position_set(100, 100); win.size_set(500, 500); win.visibility_set(true); win.title_set("Titulo"); evas_object_smart_callback_add(win._eflcxx_raw(), "delete,request", on_done, 0); elm_run(); ::elm_shutdown(); } I couldn't avoid passing the number of parameters the function has, because I need to expand the macro with the correct number of arguments. I have to #undef EO_TYPECHECK and later redef it back so elm_obj_win_constructor works. > Thanks, > -- > Cedric BAIL Regards, -- Felipe Magno de Almeida |