J'essaye d'encapsuler une bibliothèque C++ qui utilise auto_ptr. J'utilise swig et je veux générer des liaisons python. J'ai vu la section du document swig sur comment utiliser swig avec des pointeurs intelligents here. Mais je ne peux pas le faire fonctionner. Swig génère un code qui veut initialiser auto_ptr en utilisant une référence const , mais auto_ptr définit le constructeur de copie avec une référence non-const par ex. auto_ptr (auto_ptr &). Le code généré ne compile pas avec "éliminations const qualificateurs". Quand je supprime manuellement le qualificateur const, le code se compile bien.auto_ptr avec swig
J'ai vu beaucoup d'entrées de liste de diffusion mais rien n'a aidé. Quelqu'un peut-il me fournir un exemple de travail. Mon échantillon non de travail est ici:
%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>;
Je l'ai compilé en utilisant CMake avec le CMakeLists.txt suivant:
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})