[C++-sig] Re: boost.python: problem exposing static attribute with specific to_python converter
David Abrahams
dave at boost-consulting.com
Sat Jan 8 00:18:59 CET 2005
Baptiste Lepilleur wrote:
> Python 2.3.3 (#51, Dec 18 2003, 20:22:39) [MSC v.1200 32 bit (Intel)] on
> win32
> Type "help", "copyright", "credits" or "license" for more information.
>>>> import localcegui as cegui
>>>> print "Member:", cegui.TestString().memberFn()
> Member: member
>>>> print "StaticVar:", cegui.TestString.staticVar
> StaticVar:
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> TypeError: No Python class registered for C++ class class CEGUI::String
>
> Changing 'staticVar' type from CEGUI::String to std::string remove this
> error message, so something is really going on with the to_python
> conversion. Why isn't the to_python_converter found ?
According to
http://www.boost.org/libs/python/doc/v2/class.html#class_-spec-modifiers
def_readonly(name, pointer_to_data)
is equivalent to
this->add_static_property(name, make_getter(pointer_to_data));
(modulo a typo, which I'm fixing now).
and according to
http://www.boost.org/libs/python/doc/v2/data_members.html#make_getter-spec
make_getter(pointer_to_data)
"Creates a Python callable object which accepts no arguments and returns
[pointer_to_data] ... converted to_python on demand. If policies is
supplied, it will be applied to the function as described here.
Otherwise, the library attempts to determine whether D is a user-defined
class type, and if so uses reference_existing_object."
reference_existing_object requires a Python wrapper class for the
returned type to exist, so that it can create an instance of that class
containing a pointer to the pointee. If you want it to use your
converter, you need to get it to use some other policy, like
default_call_polices:
.add_static_property("staticVar", make_getter(&TestString::staticVar,
default_call_policies()));
HTH,
--
Dave Abrahams
Boost Consulting
http://www.boost-consulting.com
More information about the Cplusplus-sig
mailing list