%module smart_pointer_inherit #ifdef SWIGCSHARP // Test that the override is removed in the smart pointer for custom method modifiers %csmethodmodifiers hi::Derived::value3 "/*csmethodmodifiers*/ public override"; #endif %inline %{ namespace hi { struct Base { Base(int i) : val(i) {} virtual ~Base() { } virtual int value() = 0; virtual int value2() { return val; } virtual int value3() { return val; } int valuehide() { return val; } int val; }; struct Derived : Base { Derived(int i) : Base(i) {} virtual int value() { return val; } virtual int value3() { return Base::value3(); } int valuehide() { return -1; } }; template struct SmartPtr { SmartPtr(T *t) : ptr(t) {} T * operator->() const { return ptr; } private: T *ptr; }; } %} %template(SmartBase) hi::SmartPtr; %template(SmartDerived) hi::SmartPtr; %include std_vector.i %inline %{ class ItkLevelSetNodeUS2 { int x; }; %} #ifdef SWIGCSHARP // Get rid of C# compiler warnings. // Really the itkVectorContainerUILSNUS2_Pointer class should be manually modified to contain the same %extend methods that are in std_vector.i %csmethodmodifiers std::vector::getitemcopy "protected" %csmethodmodifiers std::vector::getitem "protected" %csmethodmodifiers std::vector::setitem "protected" %csmethodmodifiers std::vector::size "protected" %csmethodmodifiers std::vector::capacity "protected" %csmethodmodifiers std::vector::reserve "protected" #endif %template(VectorLevelSetNodeUS2) std::vector< ItkLevelSetNodeUS2 >; %inline %{ class ItkVectorContainerUILSNUS2 : public std::vector< ItkLevelSetNodeUS2 > { }; class ItkVectorContainerUILSNUS2_Pointer { public: ItkVectorContainerUILSNUS2 * operator->() const { return 0; } }; %}