你能SWIG一个boost :: optional <>吗?

ald*_*ldo 7 c# c++ swig boost

我一直在成功使用SWIG来构建一个包装器接口,使我的C++库在C#中可用.最近我暴露了一些boost::optional<>对象,SWIG遇到了问题.有没有一种标准的方法可以解决这个问题?有人必须在此之前碰到这个......

Mar*_*nen 5

由于 SWIG 不理解 boost 类型,因此必须编写类型映射。这是一对 的类型映射boost::optional<int>

在 Python 中,None或者可以将整数传递到函数中:

%typemap(in) boost::optional<int> %{
    if($input == Py_None)
        $1 = boost::optional<int>();
    else
        $1 = boost::optional<int>(PyLong_AsLong($input));
%}
Run Code Online (Sandbox Code Playgroud)

返回的 Aboost::optional<int>将转换为 None 或 Python 整数:

%typemap(out) boost::optional<int> %{
    if($1)
        $result = PyLong_FromLong(*$1);
    else
    {
        $result = Py_None;
        Py_INCREF(Py_None);
    }
%}
Run Code Online (Sandbox Code Playgroud)