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