如何接受 Boost Python 函数的字符串或 None 参数

How to accept both string or None argument to Boost Python function

使用 None 作为可选参数的默认值是 Pythonic。例如,使用 None 作为字符串参数的默认值:

def f(str_arg=None):
    if str_arg is None:
        str_arg = get_str_arg_default()
    ...

因此 f() 接受两种类型的参数 str_arg:字符串或 None

现在,我们正在使用 Boost Python 在 C++ 中实现此功能。如何让 Boost Python 接受字符串和 None 类型的参数?

能否让函数接受 boost::python::object?然后你可以通过调用 is_none().

检查它是否是 None

请参阅 https://wiki.python.org/moin/boost.python/FAQ#How_can_I_check_returning_Python_value_for_None.3F,其中提供了一些检查对象是否为 None 的建议 - 例如arg.ptr() == object().ptr()arg.ptr() == Py_Nonearg.is_none()