Python参数类型C++;签名 我有2个问题,都与Python和C++混合的参数有关…我有一个C++函数,我用Python调用它,函数取日期和字符串。

Python参数类型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给出一个日期,该日期将以正确的签名读取吗 非常感谢您的帮助!我希望这是一个相当简单的问题,我只是对不同类型的签名不是

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)。