BoostPython默认参数丢失

BoostPython默认参数丢失,python,c++,boost,Python,C++,Boost,嗯。我的游戏引擎是用C++编写的,使用Boosi::Python来解释Python脚本。可以从python手动创建场景和对象。我知道,当包装成员函数中的默认参数时,您使用BOOST_PYTHON_MEMBER_FUNCTION_重载。例如,Translate函数使用3D向量和变换空间,默认情况下,变换空间是TS_WORLD。这个很好用。当函数返回对象并需要返回值策略定义时,问题开始出现。例如场景类具有函数CreateCamera(std::string name=“”),如果设置了参数,该函数将

嗯。我的游戏引擎是用C++编写的,使用Boosi::Python来解释Python脚本。可以从python手动创建场景和对象。我知道,当包装成员函数中的默认参数时,您使用BOOST_PYTHON_MEMBER_FUNCTION_重载。例如,Translate函数使用3D向量和变换空间,默认情况下,变换空间是TS_WORLD。这个很好用。当函数返回对象并需要返回值策略定义时,问题开始出现。例如场景类具有函数CreateCamera(std::string name=“”),如果设置了参数,该函数将命名摄影机,否则它将生成名称本身。函数返回摄影机类的指针。下面是我的Python代码:

BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(CreateCamera_Overload, Scene::CreateCamera, 0, 1);
de
class_< ...
.def("CreateCamera", &Scene::CreateCamera, return_value_policy<reference_existing_object>(), CreateCamera_Overload());
…我得到以下错误:

Boost.Python.ArgumentError:Scene.CreateArea(Scene)中的Python参数类型 与C++签名不匹配: CreateCamera(类场景{lvalue},类std::basic_字符串,类std::allocator>)


它在某种程度上忽略了默认参数。如果我为pass“”的摄影机传递名称,则函数不会引发错误。若我将函数更改为void并跳过return_value_policy(这显然是不正确的),那个么它将正常工作。你知道问题出在哪里吗?

我不知道,但是你可以通过编写第二个版本的函数来解决这个问题,这个函数实际上需要一个参数。我不知道,但是你可以通过编写第二个版本的函数来解决这个问题,这个函数实际上需要一个参数。
camera = Scene.CreateCamera()