Python参数类型C++;签名 我有2个问题,都与Python和C++混合的参数有关…我有一个C++函数,我用Python调用它,函数取日期和字符串。
pythonPython参数类型C++;签名 我有2个问题,都与Python和C++混合的参数有关…我有一个C++函数,我用Python调用它,函数取日期和字符串。,c++,python,types,signature,C++,Python,Types,Signature,pythonstr与C语言相同吗++ class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > 类标准::基本字符串 其次,我的函数需要一个日期类型为类boost::gregorian::date,有人知道我如何用python给出一个日期,该日期将以正确的签名读取吗 非常感谢您的帮助!我希望这是一个相当简单的问题,我只是对不同类型的签名不是
str
与C语言相同吗++
class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
类标准::基本字符串
其次,我的函数需要一个日期类型为类boost::gregorian::date
,有人知道我如何用python给出一个日期,该日期将以正确的签名读取吗
非常感谢您的帮助!我希望这是一个相当简单的问题,我只是对不同类型的签名不是很有经验(这对于我目前链接Python和C++的实验来说不是个好兆头!) 假设您使用的是
boost::python
,让我告诉您在这些情况下如何继续。与其让boost::python
自动包装函数,不如提供自己的包装:
namespace {
void Foo_methodUsingDate( Foo* pointer, const object& dateObject )
{
boost::gregorian::date date = convertFromPython( dateObject );
pointer->methodUsingDate( date );
}
}
void wrap_Foo()
{
class_< Foo >( "Foo" )
.def( "bar",
& Foo::bar
)
.def( "foobar",
& Foo::foobar
)
.def( "methodUsingDate",
& Foo_methodUsingDate
)
;
}
名称空间{
void Foo_methodUsingDate(Foo*指针、常量对象和日期对象)
{
boost::gregorian::date=convertFromPython(dateObject);
指针->方法使用日期(日期);
}
}
void wrap_Foo()
{
类别uu(“Foo”)
.def(“bar”,
&Foo::bar
)
.def(“foobar”,
&Foo::foobar
)
.def(“methodUsingDate”,
&Foo_方法使用日期
)
;
}
当然,您需要提供一种方法,将boost::python::object
转换为boost::gregorian::date
对象。你必须决定如何处理这件事。例如,您可以假设该参数是一个由三个整数组成的序列,或者您可以允许以更复杂的方式传递参数,或者定义一个新的类来包装公历日期及其所有方法,并将其直接公开给Python
关于你的第一个问题,当使用<代码> Boo::代码> >代码:ST::String S被自动转换为Python字符串。
< P>不。为了从C或C++调用Python函数,必须使用。 pythoncapi。在C++字符串的情况下,这将意味着第一 使用StringAndSize中的PyString\u将其转换为Python字符串(
cppString.data()、cppString.size())
,并传入结果
PyObject。如果你想调用任意函数,你必须
使用PyImport\u Import
加载模块,然后使用PyObject\u GetAttrString
获取函数(Python函数是属性,就像
然后使用PyObject\u CallObject
在
转换所有参数并将其放入元组(全部通过
pythoncapi中的函数) 不,它们不一样。首先,Python对象携带GC和类型信息,并以完全不同的方式存储其属性。每当这些值跨越语言障碍时,就有可能转换,但这取决于如何混合Python和C++(Boosi::Python?使用C API)。