我已经开始使用boostpython,但遇到了一个问题。我试图将C++类暴露给Python,这没有问题。但是我似乎无法在没有得到我不理解的构建错误的情况下实现类的__str__
功能。在
我用的是boostpro的boost 1_42预装版。我使用cmake和vs2010编译器构建了这个库。在
我有一个非常简单的设置。头文件(tutorial.h)如下所示:
#include <iostream>
namespace TestBoostPython{
class TestClass {
private:
double m_x;
public:
TestClass(double x);
double Get_x() const;
void Set_x(double x);
};
std::ostream &operator<<(std::ostream &ostr, const TestClass &ts);
};
相应的cpp文件如下所示:
^{pr2}$在CMakeLists.txt文件如下所示:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
project (testme)
FIND_PACKAGE( Boost REQUIRED )
FIND_PACKAGE( Boost COMPONENTS python REQUIRED )
FIND_PACKAGE( PythonLibs REQUIRED )
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREAD ON)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
INCLUDE_DIRECTORIES ( ${PYTHON_INCLUDE_PATH} )
add_library(testme SHARED tutorial.cpp)
target_link_libraries(testme ${Boost_PYTHON_LIBRARY})
target_link_libraries(testme ${PYTHON_LIBRARY}
我得到的生成错误如下:
Compiling...
tutorial.cpp
C:\Program Files (x86)\boost\boost_1_42\boost/python/def_visitor.hpp(31) : error C2780: 'void boost::python::api::object_operators::visit(ClassT &,const char *,const boost::python::detail::def_helper &) const' : expects 3 arguments - 1 provided
with
[
U=boost::python::api::object
]
C:\Program Files (x86)\boost\boost_1_42\boost/python/object_core.hpp(203) : see declaration of 'boost::python::api::object_operators::visit'
with
[
U=boost::python::api::object
]
C:\Program Files (x86)\boost\boost_1_42\boost/python/def_visitor.hpp(67) : see reference to function template instantiation 'void boost::python::def_visitor_access::visit,classT>(const V &,classT &)' being compiled
with
[
DerivedVisitor=boost::python::api::object,
classT=boost::python::class_,
V=boost::python::def_visitor
]
C:\Program Files (x86)\boost\boost_1_42\boost/python/class.hpp(225) : see reference to function template instantiation 'void boost::python::def_visitor::visit>(classT &) const' being compiled
with
[
DerivedVisitor=boost::python::api::object,
W=TestBoostPython::TestClass,
classT=boost::python::class_
]
.\tutorial.cpp(29) : see reference to function template instantiation 'boost::python::class_ &boost::python::class_::def(const boost::python::def_visitor &)' being compiled
with
[
W=TestBoostPython::TestClass,
U=boost::python::api::object,
DerivedVisitor=boost::python::api::object
]
有人知道发生了什么事吗?如果我从包装器代码中删除.def(str(self))部分,那么一切都可以很好地编译,并且可以从python中使用该类。我将非常感谢你的帮助。在
谢谢你, 里卡德
编辑:忘了一个常量
我也遇到了同样的事情。添加此行(而不是限定str和self)也可以:
我最近遇到了这个问题; 有效的解决方案是在这一行显式地解析}:
str
和{因此它变成:
^{pr2}$我不知道为什么这是必要的(我知道boostpython中存在的一些重载解析复杂问题,可能是这样的……)但它对我有效:)
相关问题 更多 >
编程相关推荐