封了
你要先了解火山的结构类是什么:
1、结构类首先它本身是一个基于火山对象类的 C++ 类,而不是结构体。
2、它内部定义了一个真的结构体类型,名称为 结构类::S。
3、结构类并没有 S 结构体类型的成员变量,那就是它默认是不会将结构体实例化的。
综上:
1、你不可能直接取结构类之中的结构体指针,因为它只是个类型,必须将「结构类::S」实例化,才能取它的指针。
2、实例化之后,还要调用结构类内部的 SetStruct、GetStruct 方法来将结构类和结构体的数据互相复制。
3、取结构类首成员的地址,一定程度可以跟结构体地址差不多。
4、如果是一些内存对齐比较特别的结构体,结构类跟结构体的内存布局会不一样,这种就不能将结构类首成员地址当结构体地址使用。 火山还提供了另一种叫做「结构基础类」的封装。
这种封装会在类成员里将结构体实例化,然后通过结构体指针来访问结构体的成员。
这种封装获取结构体指针会很简单,你可以看一下官方的例子。
但有两个主要缺点:
1、这种结构体封装要自己写访问结构体成员的属性读和属性写方法。
2、这种结构体不能在表格封装 DLL 函数中使用; Xelloss0618 发表于 2023-11-3 22:02
你要先了解火山的结构类是什么:
1、结构类首先它本身是一个基于火山对象类的 C++ 类,而不是结构体。
2、 ...
好像c++的类会和结构体一样字节对齐。
本帖最后由 hcwanz 于 2023-11-3 23:07 编辑
所以理论上普通的结构体确实可以直接取首成员地址,当作结构体地址。不过嵌套还是不行。 hcwanz 发表于 2023-11-3 22:33
好像c++的类会和结构体一样字节对齐。
只能说大部分结构体和 C++ 类的默认内存布局差不多,但不能完全保证一样。
比如下面的例子,把对齐字节改动一下,就马上不一样了。
本帖最后由 hcwanz 于 2023-11-4 14:36 编辑
Xelloss0618 发表于 2023-11-4 00:30
只能说大部分结构体和 C++ 类的默认内存布局差不多,但不能完全保证一样。
比如下面的例子,把对齐字节改 ...
这是因为对字节对齐进行的设置导致的。因为火山只在定义结构体时定义了这个参数,如果在类定义时一同定义就不会不同了
页:
[1]