我正在尝试从Python接口我的C ++代码。到目前为止,我已按照Boost提供的说明进行操作。即,可以从这里找到的那些:http://www.boost.org/doc/libs/1_60_0/libs/python/doc/html/tutorial/tutorial/exposing.html。
我的问题是: 我可以从终端运行我的代码,但我不能在我的Anaconda / Spyder python编辑器中使用该类。在Anaconda Spyder编辑器中,如果我从终端运行相同的代码,我会收到签名错误。如何在编辑器中使其工作?
具体来说,如果我这样做:
# test.py
import greet_ext
x = "test"
planet = greet_ext.World(x)
我收到此错误:
ArgumentError: Python argument types in World.__init__(World, str)
did not match C++ signature:__init__(_object*)
C ++代码:
#include <boost/python.hpp>
#include <string>
using namespace boost::python;
// =========================================================
struct World
{
World( const std::string& msg)
{
mMsg = msg;
}
std::string show_message()
{
return mMsg;
}
std::string mMsg;
};
// =========================================================
BOOST_PYTHON_MODULE(greet_ext)
{
class_<World>("World",init<const std::string&>())
.def("show_message", &World::show_message)
.def("show_number", &World::show_number);
}