c++ - Swig 在命名空间别名上给出 "unknown namespace"错误

标签 c++ namespaces swig

我有一个像这样的头文件

#include <MyUtils.h> // defines namespace MyUtils, and MyUtils::Math

namespace mum=MyUtils::Math;

class LocalClass{

    public:
         void eat( const mum::array& arr);
};

我的 .i 文件中有通常的 %{ #include %}, %include 结构。

当我运行 swig 时,我得到:

Error: Unknown namespace 'MyUtils::Math'

SWIG 如何/为什么不知道 namespace 别名? 除了使用 #ifndef SWIG 预处理器宏之外,还有其他解决方法吗? (c.f. this discussion(我需要让我的 C++ 代码独立于 swig)

痛饮版本 2.0.4

最佳答案

假设有一个标题

// MyUtils.h
namespace MyUtils {
    namespace Math {
        typedef int SomeType;
        class array {
            //
        };
    }
}

还有一个标题

// MyHeader.h
#include <MyUtils.h>
namespace mum=MyUtils::Math;

class LocalClass {

    public:
      void eat( const mum::array& arr);
};

如果你的 SWIG 文件看起来像

// MySwigInterfaceFile.i
%module MySwigModule
#include "MyHeader.h

%include "MyHeader.h"

你遇到麻烦了,SWIG 会生成由于多种原因无法编译的代码

1) 您需要包含所有 header ,SWIG 无法递归 header ,即您必须在 MySwigInterfaceFile.i 中的 MyHeader.h 之前包含 MyUtils.h,这同样适用于使用 %include 指令的包含

2) 必须使用 using namespace MyUtils::Math;使用#include

跟随包含

3) 要让 SWIG 知道嵌套命名空间内的任何 typedef,您必须编写

namespace MyUtils {
    namespace Math {
        %typedef int SomeType;
    }
}

在使用 %include 包含之前

我建议程序员从许多小项目开始,以获得 SWIG 的实践经验。

关于c++ - Swig 在命名空间别名上给出 "unknown namespace"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24126975/

相关文章:

c++ - 以下代码片段 C++ 的说明

c++ - 如何使用 Helvetica 字体固定列宽?

namespaces - 租户和命名空间之间的概念区别是什么

c++ - 如何在 Python + SWIG 中接收引用和指针参数?

c++ - Qt : Avoid Rebuilding Applications incase strings change

c++ - 使用 for 循环读取和写入同一个文本文件

php - 消除两个供应商使用的 PHP namespace 的歧义

c++ - 限定名称和使用声明的 clang 错误消息

java - Swig for java,从带有数组成员的c结构生成代理类

python - SWIG- 将 C++ 枚举转换为 Python 枚举