Re: [pygccxml-development] binding of a default argument calling a function
Brought to you by:
mbaas,
roman_yakovenko
|
From: Roman Y. <rom...@gm...> - 2010-06-28 10:33:57
|
On Mon, Jun 28, 2010 at 1:22 PM, Benoit Leveau
<ben...@mo...> wrote:
> Hello,
>
> In a class, I have the following method:
> void addLayer( boost::shared_ptr<Color> color = Color::create(1,1,1) );
>
> This method is exposed by py++ with the following incorrect code:
> ClassWrapper_exposer.def(
> "addLayer",
> addLayer_function_type( &::MyClass::addLayer ),
> bp::arg("color")=Color::create(float, float, float)(1.0e+0f, 1.0e+0f) );
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> note the (float..) part which is incorrect, and only 2 parameters are
> supplied then
>
> Rright now i have to edit the code generated by py++...or maybe I can try to
> use the following code:
>
> boost::shared_ptr<Color> defaultColor() { return Color::create(1,1,1); }
> void addLayer( boost::shared_ptr<Color> color = defaultColor() );
>
> Is it a known bug in py++?
Yes. basically this is a limitation of the technology, py++ is built
on - gccxml : http://language-binding.net/pygccxml/upgrade_issues.html?highlight=default#free-and-member-function-default-arguments
GCCXML is not able to dump any/arbitrary C++ expression. You can find
a lot of post on this subject in GCCXML mailing list. pygccxml/py++
tries pretty hard to fix this behavior, but there are cases where it
fails.
The work-around is pretty simple:
#f is "calldef_t" instance
for arg in f.arguments:
arg.default_value = "<<<new default value or None>>>"
thus you will not have to touch generated code.
HTH
--
Roman Yakovenko
C++ Python language binding
http://www.language-binding.net/
|