On 10/05/2011 09:26 AM, Stefan Seefeld wrote:
On 10/05/2011 09:18 AM, Jim Bosch wrote:

I have one (perhaps unusual) use case that's extremely important for
me: I have a templated matrix/vector/array class, and I want to define
converters between those types and numpy that work with any
combination of template parameters.  I can do that with compile-time
converters, and after including the header everything just works.
With runtime conversions, I have to explicitly declare all the
template parameter combinations I intend to use.

Jim,

I may be a little slow here, but I still don't see the issue. You need
to export your classes to Python one at a time anyhow, i.e. not as a
template, letting the Python runtime figure out all valid template
argument permutations. So why can't the converter definitions simply be
bound to those type definitions ?


The key point is that I'm not exporting these with "class_"; I define converters that go directly to and from numpy.ndarray. So if I define template-based converters for my class ("ndarray::Array<T,N,C>"), a function that takes one as an argument:

void fillArray(ndarray::Array<double,2,1> array);

...can be wrapped to take a numpy.ndarray as an argument, just by doing:

#include "array-from-python.hpp"
...
bp::def("fillArray", &fillArray);

Without template converters, I also have to add something like:

register_array_from_python< ndarray::Array<double,2,1> >();

(where register_array_from_python is some custom runtime converter I'd have written) and repeat that for every instantiation of ndarray::Array I use. This involves looking through all my code, finding all the combinations of template parameters I use, and registering each one exactly once across all modules. That would get better with some sort of multi-module registry support, but I don't think I should have to declare the converters for each set of template parameters at all; it's better just to write a single compile-time converter.

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

Reply via email to