Python参数类型c++签名
Python argument types C++ signature
我有两个问题,都与Python和c++之间的参数如何混合有关…我有一个从python调用的c++函数,我的函数接受日期和字符串。
python str
是否与c++
class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
其次,我的函数需要class 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
)
;
}
当然你需要提供一个将boost::python::object
对象转换为boost::gregorian::date
对象的方法。你得决定怎么处理这件事。例如,你可以假设参数是一个由三个整数组成的序列,或者你可以允许更复杂的方式传递参数,或者定义一个新的类来包装阳历日期和它的所有方法,并直接将其公开给Python。
关于你的第一个问题,当使用boost::python
时,std::string
s会自动从Python字符串转换为/。
No。为了从C或c++调用Python函数,您必须使用Python C API。在c++字符串的情况下,这意味着first使用PyString_FromStringAndSize(
cppString.data(), cppString.size() )
将其转换为Python字符串,并传入结果PyObject。如果你想调用任意函数,你必须使用PyImport_Import
加载模块,然后使用PyObject_GetAttrString
来获取函数(Python函数是属性,就像其他所有内容),然后使用PyObject_CallObject
在之后调用它转换所有参数并将它们放入元组(都通过Python C API中的函数)。
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 使用 C/C++ 宏生成函数签名
- 如何使用模板函数的函数签名进行SFINAE
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- C++Builder中的OnClick事件签名存在问题
- 加密++验证大文件签名
- 具有所表示类的相同构造函数签名的代理类模板
- 获取隐式转换溢出从无符号到已签名的警告
- 为什么签名字符可以保存大于 127 的值?
- 使用不同算法的 PKCS1v15 填充进行加密 ++ 签名
- 模板签名解析为 void(void) 被 GCC 拒绝;这是否有效C++?
- 将具有固定签名的自定义函数名称注入 CRTP
- RSA_PKCS1签名验证
- 验证openssl c++中的签名,这是由JAVA DSA签名的?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 如何解释GDB中回溯的模板函数签名?
- 如何从参数中获取函数签名?
- 我能否根据其运算符()的签名专门化可变参数模板参数
- 由于签名差异,调用了错误的子类函数
- 使用可变参数函数覆盖具有不同函数签名的虚函数