%module(directors="1") director_nested_class %feature("director") DirectorOuter::DirectorInner; %feature("director") DirectorOuter::DirectorInner::DirectorInnerInner; %inline %{ struct DirectorOuter { struct DirectorInner { virtual ~DirectorInner() {} virtual int vmethod(int input) const = 0; struct DirectorInnerInner { DirectorInnerInner(DirectorInner *din = 0) {} virtual ~DirectorInnerInner() {} virtual int innervmethod(int input) const = 0; }; }; static int callMethod(const DirectorInner &di, int value) { return di.vmethod(value); } static int callInnerInnerMethod(const DirectorInner::DirectorInnerInner &di, int value) { return di.innervmethod(value); } }; %}