Im toying around with the idea to use python as an embedded scripting language for a project im working on and have got most things working. However i cant seem to be able to convert a python extended object back into a native c++ pointer.

So this is my class:

   class CGEGameModeBase
   {
   public:
       virtual void FunctionCall()=0;
       virtual const char* StringReturn()=0;
   };
class CGEPYGameMode : public CGEGameModeBase, public boost::python::wrapper<CGEPYGameMode>
   {
   public:
       virtual void FunctionCall()
       {
           if (override f = this->get_override("FunctionCall"))
               f();
       }
virtual const char* StringReturn()
       {
           if (override f = this->get_override("StringReturn"))
               return f();
return "FAILED TO CALL";
       }
   };

Boost wrapping:

   BOOST_PYTHON_MODULE(GEGameMode)
   {
class_<CGEGameModeBase, boost::noncopyable>("CGEGameModeBase", no_init); class_<CGEPYGameMode, bases<CGEGameModeBase> >("CGEPYGameMode", no_init)
           .def("FunctionCall", &CGEPYGameMode::FunctionCall)
           .def("StringReturn", &CGEPYGameMode::StringReturn);
   }

and the python code:

   import GEGameMode
def Ident():
       return "Alpha"
def NewGamePlay():
       return "NewAlpha"
def NewAlpha():
       import GEGameMode
       import GEUtil
class Alpha(GEGameMode.CGEPYGameMode):
           def __init__(self):
               print "Made new Alpha!"
def FunctionCall(self):
               GEUtil.Msg("This is function test Alpha!")
def StringReturn(self):
               return "This is return test Alpha!"
return Alpha()


Now i can call the first to functions fine by doing this:

   const char* ident = extract< const char* >( GetLocalDict()["Ident"]() );
const char* newgameplay = extract< const char* >( GetLocalDict()["NewGamePlay"]() );

   printf("Loading Script: %s\n", ident);
CGEPYGameMode* m_pGameMode = extract< CGEPYGameMode* >( GetLocalDict()[newgameplay]() );


However when i try and convert the Alpha class back to its base class (last line above) i get an boost error:

TypeError: No registered converter was able to extract a C++ pointer to type class CGEPYGameMode from this Python object of type Alpha

I have done alot of searching on the net but cant work out how to convert the Alpha object into its base class pointer. I could leave it as an object but rather have it as a pointer so some non python aware code can use it. Any ideas?


Better Formatted version: http://stackoverflow.com/questions/1355187/python-object-to-native-c-pointer

_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to