c# - 你能喝一个 boost::optional<> 吗?

标签 c# c++ boost swig

我一直在使用 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/

相关文章:

c++ - cpp-netlib 安装 visual studio 2013

c++ - 如何暂停 Boost 单元测试?

c# - 解决播放WAV文件时出现问题

c# - 我应该对哪些 C# 项目文件进行版本控制?

c++ - Boost C++ 库中 Log 函数的问题

c++ - cmake + sdl - 禁用 sdlmain

c++ - std::this_thread::sleep_for() 可以有虚假唤醒吗?

c# - 为什么静态成员首先加载到内存中

c# - 设置 ASP :ContentPlaceHolder Content programmatically

c++ - 从 boost::archive::text_oarchive_impl 和 boost::archive::text_iarchive_impl 派生自定义存档类