From: William S F. <ws...@fu...> - 2011-03-19 23:13:33
|
On 14/03/11 04:14, Adam Nielsen wrote: > Hi all, > > I'm adding SWIG support to a C++ library to make it accessible from within > Python. It seems SWIG has some support for nested classes, but it is choking > on the .hpp files I'm giving it and I'm not sure why. > > I think the problem is that the nested part is just a forward declaration: > > class Outer { > class Inner; > ... > }; > > class Outer::Inner { > class Inner2; > ... > }; > > class Outer::Inner::Inner2 { > ... > }; > > When SWIG reads that it tells me: > > Error: 'Outer::Inner' is not defined as a valid scope. > Warning 401: Nothing known about base class 'Outer::Inner::Inner2'. Ignored. > Warning 503: Can't wrap class ns::Outer::Inner unless renamed to a valid > identifier. > Warning 503: Can't wrap class Outer::Inner::Inner2 unless renamed to a > valid identifier. > > All the non-nested classes are wrapped just fine. I'm hoping it's merely a > case of having missed a directive or something, but it looks like SWIG is > treating the class declaration as having a namespace prefix rather than > realising the prefix is the parent class name. > > Is it still possible to wrap these structures with SWIG? I will never need to > create new instances of any of these classes within Python, but other > functions will return boost::shared_ptr wrapped instances of all three > classes, and I will need to call their functions from Python. > > Any suggestions? > SWIG's support of nested classes is somewhat limited. However, this way of declaring nested classes hasn't come up before. SWIG should at least be able to parse these even if they can't be usefully used from the wrappers. Please log this as a bug. William |