python - swig shared_ptr 导致不透明对象

标签 python c++ swig shared-ptr

我正在尝试将 C++ 库 SWIG 转换为 Python。其中一个 C++ 函数返回一个 shared_ptr。我成功地生成了一个 Python 模块,但是该函数返回给 Python 的对象似乎没有成员。这是 SWIG 处理 shared_ptr 的限制还是我做错了什么?

这是我的代码的大致结构:

//foo.h
namespace MyNamespace
{
    class Base {};
    template <typename T> class Derived : public Base {};
    std::shared_ptr<Base> make_obj();
}

痛饮:

//foo.i
%module foo
%include <std_shared_ptr.i>

%{
    #define SWIG_FILE_WITH_INIT
    #include "foo.h"
%}

%include "foo.h"
%template(FooA) MyNamespace::Derived< MyNamespace::AAA >;
%template(FooB) MyNamespace::Derived< MyNamespace::BBB >;
%shared_ptr(MyNamespace::Base)
%shared_ptr(FooA)
%shared_ptr(FooB)

最佳答案

我认为您这里的顺序有点不对。请注意,在 shared_ptr 中的所有示例中在看到该类型的任何声明/定义之前,他们调用 %shared_ptr 的文档。

关于 %shared_ptr 指令和 FooA/FooB 模板实例的注意事项已更正,我相信这样的事情应该适用于您的示例。

//foo.i
%module foo
%include <std_shared_ptr.i>

%{
    #define SWIG_FILE_WITH_INIT
    #include "foo.h"
%}


%shared_ptr(MyNamespace::Base)
%shared_ptr(FooA) // This should probably be MyNamespace::Derived<...>
%shared_ptr(FooB) // This should probably be the fully qualified C++ type also

%include "foo.h"

%template(FooA) MyNamespace::Derived< MyNamespace::AAA >;
%template(FooB) MyNamespace::Derived< MyNamespace::BBB >;

关于python - swig shared_ptr 导致不透明对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42728496/

相关文章:

python - 是否可以在机器上没有 Microsoft Office 的情况下运行 win32com 脚本

c++ - Windows WiFi 网络设备

c# - 在 Windows 上用 C# 加载 linux 动态库 (.so)

c - 使用 SWIG 从 C/C++ 进行 Tcl 回调

python - 在 blob 服务 python 中追加 block

Python类转换器

python - 使用\w+ 在正则表达式搜索中包含 '-'。 Python

c++ - C++ 中 While 循环的困难

c++ - 使用高斯消元法计算矩阵的逆时非常不准确

java - 如何使用 Swig 将数组从 Java 传递到 C++?