2017-01-17 22 views
-1

jvm openvr bindingを最後のopenvrバージョン1.0.5に更新しましたが、私は1つ確かめていません。 CPPでjnaで構造体sizeof()をユニオンタイプで実装する方法

は、この仮想SetOverlayIntersectionMask機能をIVROverlayクラスがあります:

virtual EVROverlayError SetOverlayIntersectionMask(
      VROverlayHandle_t ulOverlayHandle, 
      VROverlayIntersectionMaskPrimitive_t *pMaskPrimitives, 
      uint32_t unNumMaskPrimitives, 
      uint32_t unPrimitiveSize = sizeof(VROverlayIntersectionMaskPrimitive_t)) = 0; 

私の疑問は、最後の引数について。

VROverlayIntersectionMaskPrimitive_t

typedef union 
{ 
    IntersectionMaskRectangle_t m_Rectangle; 
    IntersectionMaskCircle_t m_Circle; 
} VROverlayIntersectionMaskPrimitive_Data_t; 
右上記の二つのクラスによって実装されている

IntersectionMaskRectangle_tIntersectionMaskCircle_t

struct VROverlayIntersectionMaskPrimitive_t 
{ 
    EVROverlayIntersectionMaskPrimitiveType m_nPrimitiveType; 
    VROverlayIntersectionMaskPrimitive_Data_t m_Primitive; 
}; 

VROverlayIntersectionMaskPrimitive_Data_tと呼ばれる列挙型と共用体型の変数を持つ構造体であり、

今、enumはIntに変換されますが、後者は?ポインタでなければならないので、Pointer.SIZEでしょうか?

しかしこれはVROverlayIntersectionMaskPrimitive_Data_tは抽象クラスである私の実装、次のとおりです。

two other classesで順番に実装さ
abstract class VROverlayIntersectionMaskPrimitive_Data_t : Structure { 

    constructor() : super() 
    constructor(peer: Pointer) : super(peer) 
} 

マイfirst guesssizeof(VROverlayIntersectionMaskPrimitive_Data_t)Int + Pointer.SIZE

@JvmOverloads fun setOverlayIntersectionMask(
       ulOverlayHandle: VROverlayHandle_t, 
       pMaskPrimitives: VROverlayIntersectionMaskPrimitive_t.ByReference, 
       unNumMaskPrimitives: Int, 
       unPrimitiveSize: Int = Int.BYTES + Pointer.SIZE) 

に変換ということです私の推論が正しい表示されていますか?

+0

あなたの言葉は非常に混乱しています... whats that about 'sizeof'-あなたは実際にこのキーワードがある種のデータ型だと思いますか?まあ、それはありません。そのC/C++ **演算子**は、 'size_t'型の結果をもたらします - 特定のポインタのサイズを取得しない限り、ポインタは関係ありません。実際にはポインタも可能なので実際には良い考えですあなたのアーキテクチャに応じて異なるサイズのもの – specializt

+0

申し訳ありませんが、私の間違いは、私は変更しました、私は希望が今明確です – elect

答えて

2

size()メソッドを使用してStructureUnionを含む)のサイズを取得します。組合の場合は、最大のメンバーのサイズを取得します。

ユニオンの希望するタイプをUnion.setType()に設定しました。

+0

ユニオンの構造体はどのようにチェック/クエリできますか? jnaから道がありますか? – elect

+0

これは実装固有のものです。通常、共用体には、各メンバに共通の「タイプ」フィールドがあります。または、使用されているコンテキストから区別できます。 – technomage

+0

私はついにそれを正しく得ました、おかげです! – elect

関連する問題