問題はかなり単純です。SWIG 2.0.8 を使用してラップしたい C++ 名前空間にいくつかの定数があります。次のようになります。
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# クラスを手動で追加して定義する方法はありますか?