我一直在使用 SWIG 成功构建包装器接口(interface),使我的 C++ 库在 C# 中可用。最近我曝光了一些boost::optional<>
对象和 SWIG 在使用它们时遇到问题。有没有标准的方法来处理这个问题?以前肯定有人遇到过这个......
最佳答案
由于 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));
%}
A 返回 boost::optional<int>
将被转换为 None 或 Python 整数:
%typemap(out) boost::optional<int> %{
if($1)
$result = PyLong_FromLong(*$1);
else
{
$result = Py_None;
Py_INCREF(Py_None);
}
%}
关于c# - 你能喝一个 boost::optional<> 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15912937/