%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>;
Generated by dwww version 1.15 on Tue Jul 2 00:30:50 CEST 2024.