你可以SWIG一个提升::可选<&gt ;?

时间:2013-04-09 21:30:45

标签: c# c++ boost swig

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

2 个答案:

答案 0 :(得分:4)

由于SWIG不了解提升类型,因此必须编写类型映射。这是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));
%}

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

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

答案 1 :(得分:2)

使用std :: vector

的可能的C#解决方案
Object