Boost.Python.ArgumentError:python str 未转换为 std::string
Posted
技术标签:
【中文标题】Boost.Python.ArgumentError:python str 未转换为 std::string【英文标题】:Boost.Python.ArgumentError: python str not converted to std::string 【发布时间】:2012-09-05 08:50:49 【问题描述】:我收到一个错误,我无法尝试通过 Boost.Python 包装一个相当简单的 c++ 类。 一、类:
#include <boost/python.hpp>
#include <boost/shared_ptr.hpp>
#include <vector>
#include <string>
class token
public:
typedef boost::shared_ptr<token> ptr_type;
static std::vector<std::string> empty_context;
static std::string empty_center;
token(std::string& t = empty_center,
std::vector<std::string>& left = empty_context,
std::vector<std::string>& right = empty_context)
: center(t), left_context(left), right_context(right)
virtual ~token(void)
std::vector<std::string> left_context;
std::vector<std::string> right_context;
std::string center;
;
std::string token::empty_center;
std::vector<std::string> token::empty_context;
暴露于 python via
BOOST_PYTHON_MODULE(test)
namespace bp = boost::python;
bp::class_<token, token::ptr_type>("token")
.def(bp::init<std::string&, bp::optional<std::vector<std::string>&,
std::vector<std::string>&> >())
;
然后,当尝试在 python 中使用它时:
Python 2.7.2 (default, Aug 19 2011, 20:41:43) [GCC] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from test import token
>>> word = 'aa'
>>> t = token(word)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Boost.Python.ArgumentError: Python argument types in
token.__init__(token, str)
did not match C++ signature:
__init__(_object*, std::string lvalue)
__init__(_object*, std::string lvalue, std::vector<std::string, std::allocator<std::string> > lvalue)
__init__(_object*, std::string lvalue, std::vector<std::string, std::allocator<std::string> > lvalue, std::vector<std::string, std::allocator<std::string> > lvalue)
__init__(_object*)
>>>
谁能指出这是从哪里来的? Boost.Python 不应该负责将 python 的 str
转换为 std::string
吗?
所涉及的软件/库版本:
Boost version: 1.46.1
Python version: 2.7.2
Compiler: g++ (SUSE Linux) 4.6.2
Makefile generation: cmake version 2.8.6
Make: GNU Make 3.82
【问题讨论】:
【参考方案1】:您的参数类型是std::string &
,是对std::string
的可修改引用。 Python 字符串是不可变的,因此不能转换为可修改的引用。你的参数类型应该是const std::string &
。
【讨论】:
非常感谢,就是这样......一直试图让它转换一段时间......(一旦让我这样做,就会接受这个答案)跨度>以上是关于Boost.Python.ArgumentError:python str 未转换为 std::string的主要内容,如果未能解决你的问题,请参考以下文章