递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库

关于视窗.结构类,没有封装取结构体指针函数吗?

查看数: 2811 | 评论数: 8 | 收藏 2
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-11-3 19:06

正文摘要:

是不是c++也没有?难道全球都是以成员1首地址作指针的!! 如果本来就没有相关函数,还要加加减减才得出指针的话!!那就直接取成员1首地址还高效了!! ...

回复

hcwanz 发表于 2023-11-4 11:09:24
本帖最后由 hcwanz 于 2023-11-4 14:36 编辑
Xelloss0618 发表于 2023-11-4 00:30
只能说大部分结构体和 C++ 类的默认内存布局差不多,但不能完全保证一样。
比如下面的例子,把对齐字节改 ...

这是因为对字节对齐进行的设置导致的。因为火山只在定义结构体时定义了这个参数,如果在类定义时一同定义就不会不同了



Xelloss0618 发表于 2023-11-4 00:30:14
hcwanz 发表于 2023-11-3 22:33
好像c++的类会和结构体一样字节对齐。

只能说大部分结构体和 C++ 类的默认内存布局差不多,但不能完全保证一样。
比如下面的例子,把对齐字节改动一下,就马上不一样了。


hcwanz 发表于 2023-11-3 22:35:51
本帖最后由 hcwanz 于 2023-11-3 23:07 编辑

所以理论上普通的结构体确实可以直接取首成员地址,当作结构体地址。不过嵌套还是不行。
hcwanz 发表于 2023-11-3 22:33:32
Xelloss0618 发表于 2023-11-3 22:02
你要先了解火山的结构类是什么:
1、结构类首先它本身是一个基于火山对象类的 C++ 类,而不是结构体。
2、 ...

好像c++的类会和结构体一样字节对齐。

Xelloss0618 发表于 2023-11-3 22:08:18
火山还提供了另一种叫做「结构基础类」的封装。
这种封装会在类成员里将结构体实例化,然后通过结构体指针来访问结构体的成员。
这种封装获取结构体指针会很简单,你可以看一下官方的例子。

但有两个主要缺点:
1、这种结构体封装要自己写访问结构体成员的属性读和属性写方法。
2、这种结构体不能在表格封装 DLL 函数中使用;

评分

参与人数 1金钱 +5 收起 理由
呵呵仙8 + 5 很给力!学习了,谢谢!!

查看全部评分

Xelloss0618 发表于 2023-11-3 22:02:41
你要先了解火山的结构类是什么:
1、结构类首先它本身是一个基于火山对象类的 C++ 类,而不是结构体。
2、它内部定义了一个真的结构体类型,名称为 结构类::S。
3、结构类并没有 S 结构体类型的成员变量,那就是它默认是不会将结构体实例化的。

综上:
1、你不可能直接取结构类之中的结构体指针,因为它只是个类型,必须将「结构类::S」实例化,才能取它的指针。
2、实例化之后,还要调用结构类内部的 SetStruct、GetStruct 方法来将结构类和结构体的数据互相复制。
3、取结构类首成员的地址,一定程度可以跟结构体地址差不多。
4、如果是一些内存对齐比较特别的结构体,结构类跟结构体的内存布局会不一样,这种就不能将结构类首成员地址当结构体地址使用。
呵呵仙8 发表于 2023-11-3 19:54:30

怎么感觉是在把整个结构复制到指定内存?我想要一个像取变量地址()一样高效的.取结构体指针()
创世魂 发表于 2023-11-3 19:38:04

封了





QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-24 06:06 , Processed in 0.092462 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表