gpt4 book ai didi

c++ - 在 boost::python 中实例化 shared_ptr

转载 作者:行者123 更新时间:2023-11-28 03:49:41 25 4
gpt4 key购买 nike

我有一个关于 boost python 的问题。我一直致力于将项目的一些功能导出到boost python中,但我还没有找到解决以下问题的方法:我有一组在整个游戏中存储和使用的 StatusEffect 对象。在游戏启动时,我希望能够调用一个 python 脚本来填充/添加到状态效果对象集。我可以毫无问题地将 StatusEffect 类及其派生类暴露给 python 并调用脚本。

问题是我将 StatusEffect 对象存储在 std::vector<boost::shared_ptr<StatusEffect> > Effects; 中我不知道如何创建 boost::shared_ptr<StatusEffect> 的新实例除了此处描述的添加静态创建方法的方法 http://wiki.python.org/moin/boost.python/PointersAndSmartPointers鉴于我有大量的构造函数和各种各样的派生类,这似乎充其量不是最佳解决方案。我希望能够直接使用 StatusEffect 对象的构造函数创建 boost::shared_ptr 实例,并能够将它们添加到 vector 中。这可能吗?

一个答案或一些有用的建议会很有帮助。我昨天问了一个类似的问题,但不幸的是它没有太大帮助。

提前致谢

最佳答案

希望我能理解您的问题。如果你用 shared_ptr 声明你的 python 类如 http://wiki.python.org/moin/boost.python/PointersAndSmartPointers 所示, 然后 boost::python会自动转换StatusEffect您在 python 中创建的对象 shared_ptr<StatusEffect>如有必要(您可以尝试此操作,例如通过 .def -ing 一个以 const shared_ptr<StatusEffect>&shared_ptr<StatusEffect> 作为参数的函数,并使用在 python 中创建的 StatusEffect 实例调用它。

如果你想分配一个 vector<shared_ptr<StatusEffect> > 类型的属性,您必须为其创建转换器(从 python 序列来回),这在文档中有所描述。有关示例,请参阅 c++ to python转换器模板(第 120 行),python 到 c++ 模板(第 127 行),然后将其用于序列中包含的各种类型(包括 shared_ptr 的)(第 212 行)。

然后你可以这样写 yourObject.listOfStatusEffects=[StatusEffect(),StatusEffect(),StatusEffect()]

关于c++ - 在 boost::python 中实例化 shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5925282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com