%module features // This testcase checks that %feature is working for templates and non user supplied constructors/destructors // If the default %exception is used it will not compile. It shouldn't get used. %exception "this_will_not_compile"; // Test 1: Test for no user supplied constructors and destructor %exception Simple::Simple "$action /*Simple::Simple*/"; %exception Simple::~Simple "$action /*Simple::~Simple*/"; %inline %{ class Simple {}; %} // Test 2: Test templated functions %exception foobar "$action /*foobar*/"; %inline %{ template void foobar(T t) {} %} %template(FooBarInt) foobar; // Test 3: Test templates with no user supplied constructors and destructor %exception SimpleTemplate::SimpleTemplate "$action /*SimpleTemplate::SimpleTemplate*/"; %exception SimpleTemplate::~SimpleTemplate "$action /*SimpleTemplate::~SimpleTemplate*/"; %inline %{ template class SimpleTemplate {}; %} %template(SimpleDouble) SimpleTemplate; // Test 4: Test templates with user supplied constructors and destructor %exception Template::Template "$action /*Template::Template*/"; %exception Template::Template(const Template&) "$action /*Template::Template(const Template&)*/"; %exception Template::~Template "$action /*Template::~Template*/"; %exception Template::foo "$action /*Template::foo*/"; %inline %{ template class Template { public: Template(); Template(const Template&); ~Template(); void foo(); }; // Supply methods just for the int case. Note syntax is same as the %exception syntax. Template::Template() {} Template::Template(const Template&) {} Template::~Template() {} void Template::foo() {} %} %template(TemplateInt) Template;