[C++-sig] wrapping objects which inherit from std::map

Stefan Seefeld seefeld at sympatico.ca
Wed May 6 19:29:59 CEST 2009


Jeremy Kie wrote:
> Hi,
>
> I have the following:
>
> class foo : public std::map<std::string, std::string> {
> }

You lack a semicolon here. (I also don't think it's a good idea to 
derive from standard containers, but that is an entirely different subject).

>
> BOOST_PYTHON_MODULE(foo_ext)
> {
>   using namespace boost::python;
>   class_<foo, bases<std::map>>("foo");

There are three errors here, let's start with the simplest:

You use '>>' in this line, which is a single token. You need to insert a 
whitespace there to make it two tokens, e.g. '> >'.
Next, you use 'std::map' where you ought to use a type (such as 
'std::map<std::string, std::string>'.
Finally, you only can declare bases that are themselves already exported 
to python via class_, so you need to start by exporting the base type 
std::map<std::string, std::string> prior to 'foo'.

Hope this helps,
       Stefan


-- 

      ...ich hab' noch einen Koffer in Berlin...



More information about the Cplusplus-sig mailing list