%module li_boost_shared_ptr_template // First test- Bug 3333549 - using INTEGER typedef in %shared_ptr before typedef defined %{ #include #ifdef SWIGR // remove naming conflict with R symbol #define INTEGER MYINTEGER #endif typedef int INTEGER; template class Base { public: virtual T bar() {return 1;} virtual ~Base() {} }; template class Derived : public Base { public: virtual T bar() {return 2;} }; INTEGER bar_getter(Base& foo) { return foo.bar(); } %} #if defined(SWIGJAVA) || defined(SWIGCSHARP) || defined(SWIGPYTHON) || defined(SWIGD) || defined(SWIGOCTAVE) || defined(SWIGRUBY) #define SHARED_PTR_WRAPPERS_IMPLEMENTED #endif #if defined(SHARED_PTR_WRAPPERS_IMPLEMENTED) %include %shared_ptr(Base) %shared_ptr(Derived) #endif typedef int INTEGER; template class Base { public: virtual T bar() {return 1;} }; template class Derived : public Base { public: virtual T bar() {return 2;} }; INTEGER bar_getter(Base& foo) { return foo.bar(); } %template(BaseINTEGER) Base; %template(DerivedINTEGER) Derived; // 2nd test - templates with default template parameters #if defined(SHARED_PTR_WRAPPERS_IMPLEMENTED) %shared_ptr(Space::BaseDefault) %shared_ptr(Space::DerivedDefault) %shared_ptr(Space::DerivedDefault2) #endif %inline %{ namespace Space { typedef int INT_TYPEDEF; template class BaseDefault { public: virtual T bar2() {return 3;} virtual ~BaseDefault() {} }; template class DerivedDefault : public BaseDefault { public: virtual T bar2() {return 4;} }; template class DerivedDefault2 : public BaseDefault { public: virtual int bar2() {return 4;} }; int bar2_getter(BaseDefault& foo) { return foo.bar2(); } } %} %template(BaseDefaultInt) Space::BaseDefault; %template(DerivedDefaultInt) Space::DerivedDefault; %template(DerivedDefaultInt2) Space::DerivedDefault2;