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