From: Michael E. <mi...@s2...> - 2010-02-26 01:16:33
|
On 2/25/2010 3:26 PM, David Piepgrass wrote: > I am not familiar with Perl wrapping so I can't offer much help. > > That said, I think you should make sure that the %template statement for the base class... > > %template(MyBaseMapClass) std::map< HeldType, ...>; > > ...is placed after the definition of std::map but before the definition of the derived class. Are you using SWIG's definition of std::map? STL classes can be challenging to wrap, so SWIG has special files like std_map.i for wrapping them, and these files are not always designed to handle all circumstances (e.g. maybe they weren't designed to have derived classes). > yes, I believe my order of inclusion and instantiation is correct. I am %including <stl.i> (which include std_map.i in the perl wrappers), then I instantiate my base class, then include my subclass header, and finally instantiate the subclass template instance. Upon further inspection, my first template type parameter is itself a templated type - basically a customization of std::string so that we can have case insensitive string keys. Our string class is defined in terms of std::basic_string with proper traits so as to make it case insensitive with respect to comparison. Alas, it seems the swig-perl wrappers don't have support for basic_string (or templates thereof), so I've gone with a low budget approach of just adding some extension methods directly to my subclass that give me what I need from the base class map (like a find and a set method). -Mike |