我正在尝试包装一个使用 auto_ptr 的 C++ 库。我正在使用 swig 并想生成 python 绑定。我在这里看到了 swig 文档中关于如何使用 swig 和智能指针的部分。但我无法让它工作。
Swig 生成想要使用 const 引用初始化 auto_ptr 的代码,但 auto_ptr 使用非常量引用定义了复制构造函数,例如 auto_ptr(auto_ptr &)。生成的代码不能使用“丢弃 const 限定符”进行编译。当我手动删除 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})