Enhance %extend to extend a class with template constructors

This commit is contained in:
William S Fulton 2017-01-24 08:24:46 +00:00
commit d6d7afb755
5 changed files with 48 additions and 5 deletions

View file

@ -6,6 +6,7 @@
namespace Space {
class ExtendMe {
public:
ExtendMe() {}
template <typename T>
T do_stuff_impl(int a, T b, double d) {
return b;
@ -24,7 +25,14 @@ public:
return $self->do_stuff_impl(0, b, 4.0);
}
template<typename T>
static T static_method(T t) { return 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>;
@ -34,11 +42,14 @@ public:
%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;
@ -57,7 +68,14 @@ public:
return $self->template_stuff_impl(0, b, 4.0);
}
template<typename T>
static T static_template_method(T t) { return 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>;
@ -66,6 +84,8 @@ public:
%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>;

View file

@ -34,6 +34,7 @@ public class extend_template_method_runme {
}
if (ExtendMe.static_method(123) != 123)
throw new RuntimeException("static_method failed");
ExtendMe em2 = new ExtendMe(123);
}
{
TemplateExtend em = new TemplateExtend();
@ -56,6 +57,7 @@ public class extend_template_method_runme {
}
if (TemplateExtend.static_template_method(123) != 123)
throw new RuntimeException("static_template_method failed");
TemplateExtend em2 = new TemplateExtend(123);
}
}
}

View file

@ -18,7 +18,9 @@ if ret_string != "hello there":
raise RuntimeError("string failed " + ret_string)
if ExtendMe.static_method(123) != 123:
raise RuntimeError("static_method failed");
raise RuntimeError("static_method failed")
em2 = ExtendMe(123)
em = TemplateExtend()
@ -38,4 +40,6 @@ if ret_string != "hello there":
raise RuntimeError("string failed " + ret_string)
if TemplateExtend.static_template_method(123) != 123:
raise RuntimeError("static_template_method failed");
raise RuntimeError("static_template_method failed")
em2 = TemplateExtend(123)