%module lib_std_vector %include "std_vector.i" %{ #include #include #include %} namespace std { %template(IntVector) vector; %template(BoolVector) vector; } %template(DoubleVector) std::vector; %inline %{ typedef float Real; %} namespace std { %template(RealVector) vector; } %inline %{ double average(std::vector v) { return std::accumulate(v.begin(),v.end(),0.0)/v.size(); } std::vector half(const std::vector& v) { std::vector w(v); for (std::vector::size_type i=0; i& v) { std::transform(v.begin(),v.end(),v.begin(), std::bind2nd(std::divides(),2.0)); } %} %template(IntPtrVector) std::vector; // // %{ #include %} %inline %{ namespace Test { struct A { virtual ~A() {} virtual void f(const int i) const = 0; }; struct B : public A { void f(const int i) const { std::cout << "B::f(int)\n"; } }; } %} %template(VecB) std::vector; // works %template(VecA) std::vector; // Does not work