标签:auto-ptr python c smart-pointers swig
我正在尝试包装使用auto_ptr的C库.我在喝酒
并希望生成python绑定.我看过swig文档中有关如何将swig与智能指针here一起使用的部分.但是我无法使其工作.
Swig生成想要使用const初始化auto_ptr的代码
参考,但auto_ptr使用非常量定义了复制构造函数
参考例如auto_ptr(auto_ptr&).产生的
代码不使用“丢弃常量限定符”进行编译.当我手动
删除代码编译良好的const限定符.
我见过很多邮件列表条目,但无济于事.有人可以吗
给我提供一个可行的例子.我的非工作示例在这里:
%module auto_ptr_test
%{
#include <memory>
#include <iostream>
using namespace std;
%}
namespace std {
template <class T>
class auto_ptr {
auto_ptr();
auto_ptr(auto_ptr &);
T *operator->() const;
};
}
%inline %{
class Test {
Test() {
cout << "Test()" << endl;
}
public:
static std::auto_ptr<Test> create() const {
return auto_ptr<Test>(new Test());
}
void greet() {
cout << "hello" << endl;
}
};
%}
%template () std::auto_ptr<Test>;
我使用带有以下CMakeLists.txt的cmake对其进行了编译:
cmake_minimum_required(VERSION 2.8)
find_package(SWIG REQUIRED)
include(${SWIG_USE_FILE})
FIND_PACKAGE(PythonLibs)
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
SET(CMAKE_SWIG_FLAGS "")
SET_SOURCE_FILES_PROPERTIES(auto_ptr_test.i PROPERTIES CPLUSPLUS ON)
SWIG_ADD_MODULE(auto_ptr_test python auto_ptr_test.i)
SWIG_LINK_LIBRARIES(auto_ptr_test ${PYTHON_LIBRARIES})
解决方法:
我认为您将无法在SWIG中成功包装此代码.问题是auto_ptr复制时会更改所有权.这就是为什么它要求复制构造函数不具有const的原因. SWIG内部管理对象所有权的方式意味着,如果没有大量自定义SWIG代码,您不太可能会获得所需的所有权行为.
标签:auto-ptr,python,c,smart-pointers,swig 来源: https://codeday.me/bug/20191012/1897538.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。