%module li_std_vector_as_argument %{ #include #include #include #include #include %} %{ class classA { public: classA() : a(0) {} classA(int _a) : a(_a) {} classA(const classA& c) : a(c.a) {} int a; }; %} %include stl.i namespace std { %template(IntVector) vector; %template(DoubleVector) vector; %template(StringVector) vector; %template(BoolVector) vector; %template(ClassAPtrVector) vector; } %ignore concat_vector; class classA { public: classA() : a(0) {} classA(int _a) : a(_a) {} classA(const classA& c) : a(c.a) {} int a; }; %inline %{ template std::vector concat_vector(const std::vector vector, const std::vector other_vector) { std::vector out_vector(vector); out_vector.insert(out_vector.end(), other_vector.begin(), other_vector.end()); return out_vector; } // double vectors std::vector create_double_vector(const int size, const double value) { return std::vector(size, value); } double sum_double_vector(const std::vector& vector) { return std::accumulate(vector.begin(), vector.end(), 0); } std::vector concat_double_vector(const std::vector vector, const std::vector other_vector) { return concat_vector(vector, other_vector); } // int vectors std::vector create_integer_vector(const int size, const int value) { return std::vector(size, value); } int sum_integer_vector(const std::vector& vector) { return std::accumulate(vector.begin(), vector.end(), 0); } std::vector concat_integer_vector(const std::vector vector, const std::vector other_vector) { return concat_vector(vector, other_vector); } // string vectors std::vector create_string_vector(const int size, const char *value) { return std::vector(size, value); } std::vector concat_string_vector(const std::vector vector, const std::vector other_vector) { return concat_vector(vector, other_vector); } // bool vectors std::vector create_bool_vector(const int size, const bool value) { return std::vector(size, value); } std::vector concat_bool_vector(const std::vector vector, const std::vector other_vector) { return concat_vector(vector, other_vector); } // pointer (on object) vectors std::vector create_classAPtr_vector(const int size, classA *aClassAPtr) { std::vector out_vector; for (int i=0; i concat_classAPtr_vector(const std::vector vector, const std::vector other_vector) { return concat_vector(vector, other_vector); } %}