From: Sébastien B. <bar...@cr...> - 2012-02-22 15:29:41
Attachments:
test_almath.py
|
Dear list, I'm looking at a quite simple C++ project wrapped into python using swig 1.3.40, where I have troubles getting automatic conversion from a python list to the std::vector<float> the almath::Transform constructor needs The constructors accepts a const ref to a vector of floats: explicit Transform(const std::vector<float>& pFloats); (from https://github.com/aldebaran/libalmath/blob/master/almath/types/altransform.h#L71) The wrapper file includes proper template declarations: %include "std_vector.i" namespace std { %template(vectorFloat) vector<float>; %template(vectorPosition2D) vector<AL::Math::Position2D>; %template(vectorPose2D) vector<AL::Math::Pose2D>; %template(vectorPosition6D) vector<AL::Math::Position6D>; } (from https://github.com/aldebaran/libalmath/blob/master/almath.i#L255) The Transform construction works if I pass a vectorFloat object but not with a python list. as shown by the following test $ cat test_almath.py from almath import * input = [float(x) for x in range(12)] Transform(vectorFloat(input)) # OK Transform(input) # KO Transform(tuple(input)) which returns : $ python test_almath.py Traceback (most recent call last): File "test_almath.py", line 4, in <module> Transform(input) File "/home/sbarthelemy/ar/m/build-linux64/libalmath/sdk/lib/almath.py", line 1027, in __init__ this = _almath.new_Transform(*args) NotImplementedError: Wrong number of arguments for overloaded function 'new_Transform'. Possible C/C++ prototypes are: AL::Math::Transform() AL::Math::Transform(std::vector< float,std::allocator< float > > const &) AL::Math::Transform(float const &,float const &,float const &) I do not pass exotic options to swig: /usr/bin/swig -python -outdir /home/sbarthelemy/ar/m/build-linux64/libalmath/sdk/lib -c++ \ -I/home/sbarthelemy/ar/m/libalmath \ -o /home/sbarthelemy/ar/m/build-linux64/libalmath/almathPYTHON_wrap.cxx \ /home/sbarthelemy/ar/m/libalmath/almath.i >From the documentation and the std_vector.i comments, I expected to be able to pass python sequences to the constructor, and let the magic happen. I'm quite puzzled. Any idea about what is going on? Any way to further investigate the problem? Thank you by advance for any help. -- Sébastien |
From: Josh C. <jc...@nc...> - 2012-02-22 15:55:23
|
On Wed, 22 Feb 2012, Sébastien Barthélémy wrote: > The constructors accepts a const ref to a vector of floats: > > explicit Transform(const std::vector<float>& pFloats); > > (from https://github.com/aldebaran/libalmath/blob/master/almath/types/altransform.h#L71) > > The wrapper file includes proper template declarations: > > %include "std_vector.i" > namespace std { > %template(vectorFloat) vector<float>; > %template(vectorPosition2D) vector<AL::Math::Position2D>; > %template(vectorPose2D) vector<AL::Math::Pose2D>; > %template(vectorPosition6D) vector<AL::Math::Position6D>; > } > > (from https://github.com/aldebaran/libalmath/blob/master/almath.i#L255) > > The Transform construction works if I pass a vectorFloat object but > not with a python list. The %template stuff has to come before the function declarations in order to be in effect. Josh |