%module smart_pointer_templatemethods %inline %{ namespace ns { template class Ptr { public: Ptr () {} T *operator -> () { return 0; } }; typedef unsigned short uint16_t; class InterfaceId { public: InterfaceId (uint16_t iid) {} InterfaceId() {} }; template class Objekt { public: Objekt () {} virtual ~Objekt () {} Ptr QueryInterface (InterfaceId iid) const { return Ptr(); } void DisposeObjekt (void) {} }; class Objct { public: Objct () {} virtual ~Objct () {} template Ptr QueryInterface (InterfaceId iid) const { return Ptr(); } void DisposeObjct (void) {} }; #ifdef SWIG %template(PtrObjct) Ptr; %template(PtrInt) Ptr; %template(ObjektInt) Objekt; %template(PtrObjektInt) Ptr >; %template(QueryInterfaceObjct) Objct::QueryInterface; #endif } // namespace %}