概述
Using Boost Python, is it possible for a C++ function exposed to python to return either an integer or a string (or other type) depending on the value of the single argument passed in?
So in Python I want to do this:
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++ pseudo code (obviously won't it work like this, but you get the idea)
???? 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);
}
If it makes any difference, I'm using Boost 1.48 with Python 3.2.
解决方案
Have the C++ function return a boost::python::object. The object constructor will attempt to
converts its argument to the appropriate python type and manages a reference to it. For example, boost::python::object(42) will return a Python object with a Python type of int.
Here is a basic example:
#include
/// @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);
}
and its usage:
>>> import example
>>> x = example.get_value("string")
>>> x
'string 42'
>>> type(x)
>>> x = example.get_value("int")
>>> x
42
>>> type(x)
>>> x = example.get_value("")
>>> x
>>> type(x)
最后
以上就是玩命大炮为你收集整理的python调用c返回字符串,从暴露给Python的C ++函数返回int或字符串的全部内容,希望文章能够帮你解决python调用c返回字符串,从暴露给Python的C ++函数返回int或字符串所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复