On 03/21/2012 12:09 PM, christophe jean-joseph wrote:


Thank you for your answer,

As I said, the solution I am currently using is working fine, I am just using a 
method explained in the tutorial for a function independant from any class:

http://wiki.python.org/moin/boost.python/ExportingClasses


and I extend it to a function of another class.
You recommend to write things that way:

class_<  A_i, bp::bases<B>  >(...);


but, A_i are not derived from B, and as they are already derived from A_Base_j 
classes (some from a same base class, not all of them), I already declared 
their base classes.
Declaring a function B::f(A&  a, ...) in A as:
.def("f",&B::f)
keep C++ declaration (I mean, even if B::f is declared in A, it's declared as a 
method of B, which is correct).
But what your are proposing seems not correct to me, as long as A isn't a 
derived class from B.


Oh, I understand now. "B::f" is a static member function that takes an "A" as its first argument. You just want a more elegant way to wrap a lot of similar classes.

You may not be able to get it a lot cleaner, but you can cut down some of the boilerplate by writing a templated function to wrap an "A" class. You can then just call that repeatedly:

template <typename T>
void wrapA(char const * name) {
    bp::class_<T>(name, ...)
        .def("F", &B::f)
        ;
}

BOOST_PYTHON_MODULE(whatever) {
    wrapA<A_1>("A_1");
    wrapA<A_2>("A_2");
    ...
    wrapA<A_n>("A_n");
}

Of course, you'll have to modify it to do more than that, but hopefully that will get you started.

Jim
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to