Thank you very much for your suggestion.

Jean-Joseph
 



________________________________
 De : Jim Bosch <tallji...@gmail.com>
À : christophe jean-joseph <jjchristo...@yahoo.fr> 
Cc : "cplusplus-sig@python.org" <cplusplus-sig@python.org> 
Envoyé le : Mercredi 21 mars 2012 17h32
Objet : Re: Re : Re : [C++-sig] Re : [boost] Re : Using an element of a class A 
in a constructor of a class B (reflection with boost::python)
 
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