问题很简单,我在 C++ 命名空间中有一些常量,我想使用 SWIG 2.0.8 进行包装。它看起来像这样:
namespace Example {
static const float PI = 3.14159f
...
/* Lots of classes are here */
}
不幸的是,SWIG 相当笨拙地处理了这个问题。在 C# 的情况下,它将常量添加到与命名空间同名的类中,因此Example.Example.PI
即使我显式地使用它也必须使用它来访问它using Example
(由于模块名称的屏蔽)。
在 Java 中,它甚至更糟,因为它根本不将其视为常量,我被迫使用Example.getPI()
方法调用而不是常量类变量来调用它。
如果我将常量移动到全局命名空间,这似乎可行,但必须使用ExampleConstants.PI
.
理想情况下,我希望两种语言都能够通过Example.PI
与 C++ 保持一致来访问常量。但是我会满意的一个折衷方案是,如果我可以Constants
在我的命名空间中有一个类,以便我可以Constants.PI
在任何一种语言中使用。但是当然,C++ 不允许在类中定义非整数类型,这仍然不能解决 Java 中的问题。
有没有什么优雅的方法可以用 SWIG 处理这些命名空间常量?如果没有,有没有办法可以手动添加 Java 或 C# 类来定义它们?