1

我通过 boost.python 在 c++ 中调用 python 函数。并将 char* 的参数传递给 python 函数。但是出现了错误。TypeError: NO to_python (by-value) converter found for c++ type: char.

以下是代码:C++

#include <boost/python.hpp>
#include <boost/module.hpp>
#include <boost/def.hpp>
using namespace boost::python;

void foo(object obj) {
    char *aa="1234abcd";
    obj(aa);
}

BOOST_PYTHON_MODULE(ctopy)
{
    def("foo",foo);
}

Python

import ctopy

def test(data)
    print data

t1=ctopy.foo(test)
4

1 回答 1

2

使用const char*,尤其是在使用字符串文字时:

char* bad = "Foo"; // wrong!
bad[0] = 'f'; // undefined behavior!

正确的:

const char* s = "Foo"; // correct
obj(s); // automatically converted to python string

或者,您可以使用:

std::string s = "Bar"; // ok: std::string
obj(s); // automatically converted to python string

obj("Baz"); // ok: it's actually a const char*

char c = 'X'; // ok, single character
obj(c); // automatically converted to python string

signed char d = 42; // careful!
obj(d); // converted to integer (same for unsigned char)

boost::python为Python3和Python3定义了字符串转换const char*器。为了选择合适的转换器,boost 会尝试通过专门的模板(为内置类型定义)来匹配类型,如果没有合适的内容,则默认为转换器注册表查找。由于不匹配,因此注册了 no 转换器,转换失败。std::stringcharstd::wstringchar*const char*char*

如果你有一个适当的char*const char*在将它传递给 python 之前将其转换为 a :

char* p = new char[4];
memcpy(p,"Foo",4); // include terminating '\0'
obj( const_cast<const char*>(p) );
delete [] p;
于 2012-12-25T13:11:49.770 回答