にコードを注入は、インターフェースを生成しました。SWIGTYPEの名前を変更し、私はSWIGを使用してJavaからOpenCasCade C++ライブラリにアクセスするために使用されるjCAE/occjavaを拡張しています生成されたクラス
C++側のオブジェクトのいくつかは、等価即ちオペレータ==
を比較する必要があります。ライブラリのように使用されるクラスHandle_Standard_Type
の
具体例、すなわち多かれ少なかれ列挙等シングルトンを使用してダイナミック型情報を表現します。関連性があるとは思わないでください。ちょうど背景情報としてここに入れてください。
私はSWIG定義
%typemap(javacode) Handle_Standard_Type& %{
public boolean equals(Object obj) {
boolean equal = false;
if (obj instanceof $javaclassname)
equal = ((($javaclassname)obj).swigCPtr == this.swigCPtr);
return equal;
}
%}
と次のようにこの作業を行うことができますしかし、これは醜いクラス名SWIGTYPE_p_Handle_Standard_Type
を生成します。
Remove SWIGTYPE from Generated Class name
しかし、私のように行うと示唆し、私のSWIGのDEFSに追加します。
class Handle_Standard_Type {}
Iを醜い名前を取り除きますが、equals()
メソッドはJavaクラスに注入されません。
さらに複雑なことは、OCCのクラスのほとんどが ハンドルを使用してアクセスされるため、各C++クラスExample
にはHandle_Example
クラスがあることです。
%rename(Example) Handle_Example;
だから私は最終的に生成されたJavaクラスをこの命名規則に従うことを私の解決策を必要とするので、代わりのHandle_Standard_Type
:occjavaプロジェクトSWIGの定義は以下のように定義がたくさんあるJava側でその醜さを取り除くために 名前はStandard_Type
とする必要があります。
はここで、彼らが関連しているか、撮影したパスに影響を与える可能性がある場合には、いくつかの詳細です。ここ
はOCCでダイナミック型の動作またはより正確にそれがSWIGを使用してJavaからアクセスする方法方法の一例です。 SWIGで
我々はこのような定義があります:問題のクラスの型を表すシングルトンを返すSTANDARD_TYPE(Geom_Plane)
上記(*self)->DynamicType()
で
%{
#include <Geom_Geometry.hxx>
#include <Geom_Plane.hxx>
%}
%rename(Geom_Geometry) Handle_Geom_Geometry;
%rename(Geom_Plane) Handle_Geom_Plane;
%extend Handle_Geom_Geometry {
const Handle_Standard_Type& DynamicType()
{
return (*self)->DynamicType();
}
}
class Handle_Geom_Plane: public Handle_Geom_Geometry
{
Handle_Geom_Plane()=0;
};
%extend Handle_Geom_Plane {
static const Handle_Standard_Type& STANDARD_TYPE()
{
return STANDARD_TYPE(Geom_Plane);
}
}
をして。そこには多くのマクロマジックが使われています。
Handle_Standard_Type&
と一致するように意図された私のタイプマップの定義が、これについてはまったく正しい方法であるとは確信できないので、これらの詳細を示しています。
一番下の行は、C++側で私はSTANDARD_TYPE()
マクロや関数DynamicType
によって返された値にアクセスし、C ==
の意味と同等のためequals()
でJava側にそれらを比較する必要があるということです。"[email protected]" -listから助けを借りてこれを解決この
Geom_Surface aSurface = ....
if (aSurface.DynamicType().equals(Geom_Plane.STANDARD_TYPE())) {
....
}