Reputation: 29
I have a C++ code that wraps an existing Object with a probability as follows:
template< typename Object > struct Roll
{
Object object;
double probability;
Roll( Object p, double s )
: object( p )
, probability( s )
{ }
}
Later, this will be defined in the same .h file as:
typedef Roll< Color > RollColor;
There's instruction around how to wrap a C++ struct with primitive type in SWIG but this one has something to do with the template also, so I don't know how to wrap it properly in my interface file. Do you have any idea how can I do this ? Thank you very much.
Upvotes: 1
Views: 799
Reputation: 206567
In the .i
file, use:
%template(RollColor) Roll<Color>;
More info at http://www.swig.org/Doc1.3/Python.html#Python_nn26.
Assuming you have the template defined in roll.h
and Color
is defined in color.h
, you will need to use:
%{
#include "roll.h"
#include "color.h"
%}
#include "roll.h"
#include "color.h"
%template(RollColor) Roll<Color>;
Update, in response to OP's comment
You can use:
%template(RollColors) std::vector<Roll<Color>>;
However, you will need to implement a default constructor in Roll
first. Without that you can't create a std::vector
of Roll<T>
s.
You can use
%template(RollColors) std::vector<RollColor>;
only if you have a C++ typedef.
%{
#include "roll.h"
#include "color.h"
typedef Roll<Color> RollColor;
%}
Upvotes: 5