Python参数类型C++

2024-04-18 23:55:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有2个问题,都与Python和C++混合的参数有关…我有一个C++函数,我用Python调用,我的函数使用日期和字符串。在

是一个Python ^ {CD1>},与C++ +/P>相同

class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >

其次,我的函数需要一个class boost::gregorian::date类型的日期,有人知道我如何在python中给出一个日期,并用正确的签名读取?在

非常感谢帮助!我希望这是一个相当简单的问题,我只是对不同类型的签名经验不多(这对于我目前实验连接Python和C++来说并不好)。在


Tags: 函数字符串类型参数stringbasicgregorianstruct
2条回答

假设您使用的是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对象的方法。你必须决定如何处理。例如,您可以假设参数是由三个整数组成的序列,或者您可以允许更复杂的方式传递参数,或者定义一个新类来包装gregorian日期及其所有方法并将其直接公开给Python。在

{cds}第一次将字符串从cd1}自动转换为cd6}。在

为了从C或C++调用Python函数,必须使用 pythoncapi。在C++字符串的情况下,这将意味着第一 将其转换为Python字符串,使用PyString_FromStringAndSize( cppString.data(), cppString.size() ),并传入结果 PyObject。如果你想调用一个任意函数,你必须 使用PyImport_Import加载模块,然后PyObject_GetAttrString 获取函数(Python函数是属性,就像 所有其他内容),然后在之后使用PyObject_CallObject来调用它 转换了所有参数并将它们放入一个元组中(全部通过 函数)。在

相关问题 更多 >