gpt4 book ai didi

c++ - 从暴露给 Python 的 C++ 函数返回 int 或 string

转载 作者:行者123 更新时间:2023-11-30 02:52:30 26 4
gpt4 key购买 nike

使用 Boost Python,暴露给 Python 的 C++ 函数是否可以根据传入的单个参数的返回整数或字符串(或其他类型)? p>

所以在 Python 中我想这样做:

from my_module import get_property_value     

# get an integer property value
i = get_property_value("some_int_property")

# get a string
s = get_property_value("some_string_property")

C++ 伪代码(显然不会像这样工作,但你明白了)

???? getPropertyValue(const char* propertyName)
{
Property *p = getProperty(propertyName);
switch(p->type)
{
case INTEGER: return p->as_int();
case STRING: return p->as_string();
...
}
}


BOOST_PYTHON_MODULE(my_module)
{
boost::python::def("get_property_value", &getPropertyValue);
}

如果有任何不同,我使用的是 Boost 1.48 和 Python 3.2。

最佳答案

让 C++ 函数返回 boost::python::object . object 构造函数将尝试将其参数转换为适当的 python 类型并管理对它的引用。例如,boost::python::object(42) 将返回一个 Python 类型为 int 的 Python 对象。


这是一个基本的例子:

#include <boost/python.hpp>

/// @brief Get value, returning a python object based on the provided type
/// string.
boost::python::object get_value(const std::string& type)
{
using boost::python::object;
if (type == "string") { return object("string 42"); }
else if (type == "int") { return object(42); }
return object(); // None
}

BOOST_PYTHON_MODULE(example)
{
namespace python = boost::python;
python::def("get_value", &get_value);
}

及其用法:

>>> import example
>>> x = example.get_value("string")
>>> x
'string 42'
>>> type(x)
<type 'str'>
>>> x = example.get_value("int")
>>> x
42
>>> type(x)
<type 'int'>
>>> x = example.get_value("")
>>> x
>>> type(x)
<type 'NoneType'>

关于c++ - 从暴露给 Python 的 C++ 函数返回 int 或 string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18830812/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com