【发布时间】:2017-01-17 09:53:20
【问题描述】:
我将jvm openvr binding 更新为最新的openvr 版本1.0.5,但我不确定一件事。
在 cpp 中,有 IVROverlay 类和这个虚拟的 SetOverlayIntersectionMask 函数:
virtual EVROverlayError SetOverlayIntersectionMask(
VROverlayHandle_t ulOverlayHandle,
VROverlayIntersectionMaskPrimitive_t *pMaskPrimitives,
uint32_t unNumMaskPrimitives,
uint32_t unPrimitiveSize = sizeof( VROverlayIntersectionMaskPrimitive_t ) ) = 0;
我对最后一个论点表示怀疑。
VROverlayIntersectionMaskPrimitive_t:
struct VROverlayIntersectionMaskPrimitive_t
{
EVROverlayIntersectionMaskPrimitiveType m_nPrimitiveType;
VROverlayIntersectionMaskPrimitive_Data_t m_Primitive;
};
是一个带有枚举类型和联合类型变量的结构体,称为VROverlayIntersectionMaskPrimitive_Data_t:
typedef union
{
IntersectionMaskRectangle_t m_Rectangle;
IntersectionMaskCircle_t m_Circle;
} VROverlayIntersectionMaskPrimitive_Data_t;
上面的两个类 IntersectionMaskRectangle_t 和 IntersectionMaskCircle_t 正在实现它
现在,枚举转换为Int,但后者呢?既然应该是指针,我猜应该是Pointer.SIZE?
不过这是我的实现,VROverlayIntersectionMaskPrimitive_Data_t 是一个抽象类:
abstract class VROverlayIntersectionMaskPrimitive_Data_t : Structure {
constructor() : super()
constructor(peer: Pointer) : super(peer)
}
由two other classes依次实现。
我的first guess 是sizeof(VROverlayIntersectionMaskPrimitive_Data_t) 转换为Int + Pointer.SIZE
@JvmOverloads fun setOverlayIntersectionMask(
ulOverlayHandle: VROverlayHandle_t,
pMaskPrimitives: VROverlayIntersectionMaskPrimitive_t.ByReference,
unNumMaskPrimitives: Int,
unPrimitiveSize: Int = Int.BYTES + Pointer.SIZE)
我的推理是否正确?
【问题讨论】:
-
你的话非常令人困惑......关于
sizeof- 你真的认为这个关键字是某种数据类型吗?嗯,它不是。它是一个 C/C++ operator ,它将产生size_t类型的结果 - 除非您想检索特定指针的大小,否则不涉及指针......这实际上是一个好主意,因为即使指针的大小可以不同,具体取决于您的架构 -
对不起,我的错误,我修改了,希望现在清楚