%module template_typedef_rec %inline %{ // --- includes required to compile the wrapper code --- typedef size_t MY_sizeT; typedef long MY_intT; typedef double MY_floatT; class test_Array { public: typedef MY_intT intT; typedef MY_sizeT sizeT; }; template class ArrayIterator_ { public: typedef test_Array::intT intT; }; template class ArrayReverseIterator { public: typedef test_Array::intT intT; }; template class ArrayPrimitiveT : public test_Array { public: typedef T ValueT; typedef T valueT; typedef ArrayIterator_ Iterator; typedef ArrayIterator_ ConstIterator; typedef ArrayReverseIterator ReverseIterator; typedef ArrayReverseIterator ConstReverseIterator; }; template class TreeNode { public: typedef T ValueT; typedef T valueT; typedef MY_intT intT; typedef MY_sizeT sizeT; }; template struct ArrayPointerT { }; template class TreeIterator { public: typedef MY_intT intT; typedef MY_sizeT sizeT; typedef ArrayPointerT< T* > NodeArrayT; }; template class Tree { public: typedef T ValueT; typedef T valueT; typedef MY_intT intT; typedef MY_sizeT sizeT; typedef TreeNode NodeT; typedef ArrayPointerT< NodeT* > NodeArrayT; typedef TreeIterator Iterator; typedef TreeIterator ConstIterator; }; class ModelNode { typedef MY_intT intT; typedef MY_floatT floatT; typedef MY_sizeT sizeT; }; class Model { typedef MY_intT intT; typedef MY_sizeT sizeT; typedef Tree TreeT; typedef TreeT::NodeT TreeNodeT; typedef TreeT::Iterator TreeIteratorT; }; %} // --- define ANSI C/C++ declarations to be interfaced --- %template(ModelTree) Tree;