Thread: [pygccxml-development] Wrapping abstract C++ classes
Brought to you by:
mbaas,
roman_yakovenko
From: Gustavo C. <gjc...@gm...> - 2007-05-05 17:29:28
|
Is it possible to wrap a C++ class that has pure virtual functions? I am getting a compilation error below; what should I do? PS: those pure virtual methods are being exclud()ed by me. /usr/include/boost/python/object/value_holder.hpp:66: error: cannot declare field 'boost::python::objects::value_holder<Queue_wrapper>::m_held' to be of abstract type 'Queue_wrapper' debug/bindings/python/ns3.cpp:58: note: because the following virtual functions are pure within 'Queue_wrapper': ./debug/ns3/queue.h:91: note: virtual bool ns3::Queue::DoEnqueue(const ns3::Packet&) ./debug/ns3/queue.h:92: note: virtual bool ns3::Queue::DoDequeue(ns3::Packet&) ./debug/ns3/queue.h:93: note: virtual bool ns3::Queue::DoPeek(ns3::Packet&) Compilation failed -- Gustavo J. A. M. Carneiro "The universe is always one step beyond logic." -- Frank Herbert |
From: Roman Y. <rom...@gm...> - 2007-05-05 17:41:30
|
On 5/5/07, Gustavo Carneiro <gjc...@gm...> wrote: > Is it possible to wrap a C++ class that has pure virtual functions? I am > getting a compilation error below; what should I do? > > PS: those pure virtual methods are being exclud()ed by me. If you exclude them, than I guess you don't want Python user to create instances of the class and derive from it. If I am right, than you should use no_init: http://boost.org/libs/python/doc/v2/class.html. The only way to tweak Py++ to generate no_init for the class is to exclude all class constructors. HTH. -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |
From: Gustavo C. <gjc...@gm...> - 2007-05-05 20:30:14
|
On 05/05/07, Roman Yakovenko <rom...@gm...> wrote: > > On 5/5/07, Gustavo Carneiro <gjc...@gm...> wrote: > > Is it possible to wrap a C++ class that has pure virtual functions? I > am > > getting a compilation error below; what should I do? > > > > PS: those pure virtual methods are being exclud()ed by me. > > If you exclude them, than I guess you don't want Python user to create > instances of the class and derive from it. If I am right, than you > should use no_init: > > http://boost.org/libs/python/doc/v2/class.html. > > The only way to tweak Py++ to generate no_init for the class is to > exclude all class constructors. Well, assuming the code below is correct, it doesn't seem to make any difference: for meth in Queue.constructors(): meth.exclude() But, anyway, I just white-listed the pure virtual methods and now it compiles. They won't work in runtime because they handle unregistered parameters, but that is a lesser evil. Thanks anyway, -- Gustavo J. A. M. Carneiro "The universe is always one step beyond logic." -- Frank Herbert |
From: Roman Y. <rom...@gm...> - 2007-05-06 05:17:56
|
On 5/5/07, Gustavo Carneiro <gjc...@gm...> wrote: > On 05/05/07, Roman Yakovenko <rom...@gm...> wrote: > > On 5/5/07, Gustavo Carneiro <gjc...@gm...> wrote: > > > Is it possible to wrap a C++ class that has pure virtual functions? I > am > > > getting a compilation error below; what should I do? > > > > > > PS: those pure virtual methods are being exclud()ed by me. > > > > If you exclude them, than I guess you don't want Python user to create > > instances of the class and derive from it. If I am right, than you > > should use no_init: > > > > http://boost.org/libs/python/doc/v2/class.html. > > > > The only way to tweak Py++ to generate no_init for the class is to > > exclude all class constructors. > > Well, assuming the code below is correct, it doesn't seem to make any > difference: > > for meth in Queue.constructors(): > meth.exclude() > > But, anyway, I just white-listed the pure virtual methods and now it > compiles. They won't work in runtime because they handle unregistered > parameters, but that is a lesser evil. If you had some free time, could you submit a complete example that show a problem? Thanks -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |