将boost ::: tuple的tuple部分暴露给boost python

|| 我一直在尝试找出如何在我的课程中公开一个属性boost :: tuple。元组的定义如下:
typedef boost::shared_ptr<Action> action_ptr;
typedef boost::tuple<BattleCharacter*, action_ptr > ActionTargetTuple;
它包含在一个定义如下的类中:
class Action : public Cloneable<Action>
{
     public:
          //Irrelevant Code Omitted
          std::vector<ActionTargetTuple> Targets;
}
我在搜索有关如何将boost :: tuple转换为python元组的过程中看过许多文章,但这不是我想要的。我希望能够访问Action类中存在的元组。 (我知道如何做向量部分)。
class_<Action, std::auto_ptr<ActionWrapper> >(\"Action\")
        .def(\"Targets\", &Action::Targets)
    ;
我像上面一样简单地公开它。我认为我可以通过以下一些变化来揭露它:
 class_<ActionTargetTuple>(\"ActionTargetTuple\")
        .def(\"get\", &ActionTargetTuple::get<int>, return_value_policy<reference_existing_object>())
        ;
然后使用get from python,但如果可以通过这种方式实现,则我不确定设置需要什么。有谁知道该怎么做/可以建议替代方案吗? 谢谢     
已邀请:
        您可以使用:
...
    .add_property(\"Targets\", & ActionTargetTuple::get, &ActionTargetTuple::set)
使用C ++中的getter / setter方法制作读写属性 如果要控制所有权:
namespace bp = boost::python;
...
    .add_property(\"Targets\",
        bp::make_function(&ActionTargetTuple::get, bp::return_value_policy<...>()),
        bp::make_function(&ActionTargetTuple::set, bp::return_value_policy<...>())
    )
    
        除了使用上一个答案中所述的
add_property
和编写访问器函数外,还可以考虑为元组(ple7ѭ和
boost::python::tuple
之间)编写转换器,并用those9ѭ或
def_readwrite
直接公开这些属性。如果您要公开很多这样的属性,那是值得的。 它有一个您可以适应c ++→python转换的模板(使用boost :: tuple而不是std :: pair),尽管除非您使用c ++ 0x,否则必须为不同数量的参数写出模板。 如果您的属性是可读写的,另外还定义了from-python转换器,则可以在网上找到示例。这是我用来定义通用sequence-std :: vector转换器的代码。对于您的情况,您必须检查python对象是否为序列,是否具有正确数量的项目,可以从每个项目中提取所需的类型;然后返回新的boost :: tuple对象。 HTH,edx。 附言我发现ackward已准备好转换器,也许您可​​以重复使用它。 Doc在这里     

要回复问题请先登录注册