gpt4 book ai didi

c++ - SWIG:如何将 boost::shared_ptr 包装到 std::vector?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:58:41 35 4
gpt4 key购买 nike

我有一些 C++ 代码将 boost::shared_ptr 返回到 std::vector,但是我无法让 SWIG 正确包装它以使对象在 Python 中可迭代。没有 boost::shared_ptr 它工作正常。有谁知道如何在 shared_ptr 中包装 vector ?

这是一个演示问题的例子:

%module example

%include <std_vector.i>
%include <boost_shared_ptr.i>

%shared_ptr(Inner)
%shared_ptr(InnerVector)

%inline %{
#include <boost/shared_ptr.hpp>
#include <vector>

struct Inner {
int dummy;
};
typedef std::vector< boost::shared_ptr<Inner> > InnerVector;
typedef boost::shared_ptr<InnerVector> InnerVectorPtr;

InnerVectorPtr getVectorPtr()
{
InnerVectorPtr v(new InnerVector());
boost::shared_ptr<Inner> i(new Inner);
i->dummy = 222;
v->push_back(i);
return v;
}

%}

%template(InnerVector) ::std::vector< boost::shared_ptr<Inner> >;

还有一个 Python 脚本示例:

import example

v = example.getVectorPtr()
print 'Vector is:', v
for i in v:
print 'Instance is:', i
print 'Value is:', i.dummy

对我来说,是这样说的:

Vector is: <Swig Object of type 'InnerVectorPtr *' at 0x1127270>
Traceback (most recent call last):
File "test.py", line 5, in <module>
for i in v:
TypeError: 'SwigPyObject' object is not iterable

有什么建议吗?

最佳答案

您可能想尝试 Boost.PythonPy++ .如果您已经在使用 Boost,它会为复杂的 C++ 结构提供非常好的包装(并且几乎是自动包装)。我已经在几个项目中使用过它。

你也应该看看this question它看起来相关但不完全是您的问题。

关于c++ - SWIG:如何将 boost::shared_ptr 包装到 std::vector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5839323/

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