The std::vector wrappers have been changed to work by default for elements that are
not default insertable, i.e. have no default constructor. This has been achieved by
not wrapping:
vector(size_type n);
Previously the above had to be ignored via %ignore.
If the above constructor is still required it can be added back in again via %extend:
%extend std::vector {
vector(size_type count) { return new std::vector< T >(count); }
}
Alternatively, the following wrapped constructor could be used as it provides near-enough
equivalent functionality:
vector(jint count, const value_type& value);
The equivalent change to std::list has also been made (std::list
wrappers were not in the previous release [3.0.12] though).
19 lines
381 B
OpenEdge ABL
19 lines
381 B
OpenEdge ABL
%module stl_no_default_constructor
|
|
|
|
%include <stl.i>
|
|
|
|
%inline %{
|
|
struct NoDefaultCtor {
|
|
int value;
|
|
NoDefaultCtor(int i) : value(i) {}
|
|
};
|
|
%}
|
|
|
|
#if defined(SWIGCSHARP) || defined(SWIGJAVA) || defined(SWIGD)
|
|
%template(VectorNoDefaultCtor) std::vector<NoDefaultCtor>;
|
|
#endif
|
|
|
|
#if defined(SWIGJAVA)
|
|
%include <std_list.i>
|
|
%template(ListNoDefaultCtor) std::list<NoDefaultCtor>;
|
|
#endif
|