tags:

views:

2433

answers:

3

I'm trying to expose this function to Python using SWIG:

std::vector<int> get_match_stats();

And I want SWIG to generate wrapping code for Python so I can see it as a list of integers.

Adding this to the .i file:

%include "typemaps.i"
%include "std_vector.i"

namespace std
{
  %template(IntVector) vector<int>;
}

I'm running SWIG Version 1.3.36 and calling swig with -Wall and I get no warnings.

I'm able to get access to a list but I get a bunch of warnings when compiling with -Wall (with g++ (GCC) 4.2.4 ) the generated C++ code that say:

  warning: dereferencing type-punned pointer will break strict-aliasing rules

Am I exposing the function correctly? If so, what does the warning mean?

+3  A: 
%template(IntVector) vector<int>;
Mr Fooz
That's what I tried and I get a bunch of warnings when compiling with g++. Any ideas?
Marcos Lara
What version of g++ are you using? I'm using 4.1.2 and I don't get any warnings, even with -Wall. I don't remember any warnings back when I was using 3.3 or so either.Note the extra "<int>" in this post that's missing from the original post.
Mr Fooz
The <int> was there, but it wasn't showing. Fixed it!
Marcos Lara
I'm using g++ 4.2.4 and trying to build with `-Wall -Werror -ansi -pedantic`. I just tried building it with just -Wall and still get the warnings.
Marcos Lara
This might be a new 4.2-ism. There have been some big changes under the hood with gcc 4.2. Could you post the generated line of code that's creating this warning?
Mr Fooz
Here is the code: http://stackoverflow.com/questions/276769/how-to-expose-stdvectorint-as-a-python-list-using-swig#287580
Marcos Lara
See if you can hunt down the definition for SWIG_ConvertPtr (or run the cxx file through the gcc preprocessor to see what that expands to). I'm guessing that it's a macro that needs to be rewritten. Also, take a look athttp://mail.opensolaris.org/pipermail/tools-gcc/2005-August/000047.html
Mr Fooz
Some of the older versions of SWIG generate sloppy code. GCC 4.2 doesn't like a lot of it.
Seth Johnson
A: 
Marcos Lara
A: 

I don't have much experience with Swig, but are you #including your C++ header file in your .i file? Try one (or both) of

%include "myvector.h"


%{
#   include "myvector.h"
%}
Fergal