mirror of https://github.com/swig/swig
93 lines
2.2 KiB
OpenEdge ABL
93 lines
2.2 KiB
OpenEdge ABL
%module extend_template_method
|
|
|
|
%include <std_string.i>
|
|
|
|
%inline %{
|
|
namespace Space {
|
|
class ExtendMe {
|
|
public:
|
|
ExtendMe() {}
|
|
template <typename T>
|
|
T do_stuff_impl(int a, T b, double d) {
|
|
return b;
|
|
}
|
|
};
|
|
}
|
|
%}
|
|
|
|
%extend Space::ExtendMe {
|
|
template<typename T>
|
|
T do_stuff(int a, T b) {
|
|
return $self->do_stuff_impl(a, b, 4.0);
|
|
}
|
|
template<typename T>
|
|
T do_overloaded_stuff(T b) {
|
|
return $self->do_stuff_impl(0, b, 4.0);
|
|
}
|
|
template<typename T>
|
|
static T static_method(T t) {
|
|
return t;
|
|
}
|
|
template<typename T>
|
|
ExtendMe(T x) {
|
|
Space::ExtendMe *em = new Space::ExtendMe();
|
|
return em;
|
|
}
|
|
}
|
|
%template(do_stuff_double) Space::ExtendMe::do_stuff<double>;
|
|
%template(do_stuff_string) Space::ExtendMe::do_stuff<std::string>;
|
|
|
|
%template(do_overloaded_stuff) Space::ExtendMe::do_overloaded_stuff<std::string>;
|
|
%template(do_overloaded_stuff) Space::ExtendMe::do_overloaded_stuff<double>;
|
|
|
|
%template(static_method) Space::ExtendMe::static_method<int>;
|
|
|
|
%template(ExtendMe) Space::ExtendMe::ExtendMe<int>;
|
|
|
|
%inline %{
|
|
namespace Space {
|
|
template<typename X>
|
|
class TemplateExtendMe {
|
|
public:
|
|
TemplateExtendMe() {}
|
|
template <typename T>
|
|
T template_stuff_impl(X a, T b, double d) {
|
|
return b;
|
|
}
|
|
};
|
|
}
|
|
%}
|
|
|
|
%extend Space::TemplateExtendMe {
|
|
template<typename T>
|
|
T do_template_stuff(int a, T b) {
|
|
return $self->template_stuff_impl(a, b, 4.0);
|
|
}
|
|
template<typename T>
|
|
T do_template_overloaded_stuff(T b) {
|
|
return $self->template_stuff_impl(0, b, 4.0);
|
|
}
|
|
template<typename T>
|
|
static T static_template_method(T t) {
|
|
return t;
|
|
}
|
|
template<typename T>
|
|
TemplateExtendMe(T x) {
|
|
Space::TemplateExtendMe<X> *em = new Space::TemplateExtendMe<X>();
|
|
return em;
|
|
}
|
|
|
|
%template(do_template_stuff_double) do_template_stuff<double>;
|
|
%template(do_template_stuff_string) do_template_stuff<std::string>;
|
|
|
|
%template(do_template_overloaded_stuff) do_template_overloaded_stuff<std::string>;
|
|
%template(do_template_overloaded_stuff) do_template_overloaded_stuff<double>;
|
|
|
|
%template(static_template_method) static_template_method<int>;
|
|
|
|
%template(TemplateExtendMe) Space::TemplateExtendMe::TemplateExtendMe<int>;
|
|
}
|
|
|
|
%template(TemplateExtend) Space::TemplateExtendMe<int>;
|
|
|