递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 298|回复: 7
打印 上一主题 下一主题

[其它] 当封装一个类为普通的和一个指针的如何整

[复制链接]

231

主题

1728

帖子

7139

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
7139
QQ
跳转到指定楼层
楼主
发表于 昨天 17:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
问题如下:
当封装的类有时调用是普通的类有时是指针类应该如何做?

原生代码
  1. AcGeLineSeg2d line, * pLine;
复制代码
在官方手册中 别名类型为本地参考类型则为指针进行访问。那么好了。如果定义两个别名类,他们的类型必须都是本地参考类型,火山语法不允许一个类为本地类,一个为本地参考类型。

而要实现指针又必须使用本地参考类型,那么火山官方库当中我只找到一个 本地结构指针模板 他的类型是本地参考这样就可以实现一个为普通一个为指针。代码如下图所示


但这样做涉及到一个问题就是,类的属性是默认私有的,结构体属性默认为公开的。
当然可以自己实现一个本地参考模板来实现。但我问的是火山官方库有没有对应类的本地参考类型用来让实现指针的类进行继承。
火山视窗封装视频教程
回复

使用道具 举报

231

主题

1728

帖子

7139

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
7139
QQ
沙发
 楼主| 发表于 昨天 17:59 | 只看该作者
这种方式好像不行,因没有继承关系,就算@模板实现类来实现不是指针的类,那么调用时也是没办法调用的。

难道只能指针的和不是指针的函数都写一遍嘛。
火山视窗封装视频教程
回复

使用道具 举报

75

主题

1138

帖子

5164

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5164
板凳
发表于 昨天 18:06 | 只看该作者
说的有点绕我没太看懂, 但有个比较笨的解决办法.

指针类定义一个`取`方法, 用这个方法返回对象别名类, 然后操作这个返回的对象

指针变量.取().对象函数()
回复

使用道具 举报

75

主题

1138

帖子

5164

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5164
地板
发表于 昨天 18:13 | 只看该作者
然后还有个进化一些的方案(就是不知道行不行).

把`取`换成`_`, 然后设置为属性读, 这样指针操作就应是:

指针变量._.对象函数()

体验上应该和c的`->`差不多了
回复

使用道具 举报

231

主题

1728

帖子

7139

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
7139
QQ
5#
 楼主| 发表于 昨天 18:16 | 只看该作者
我的意思是这样的

假设  有个 类 为  A

封装时,封装一个普通的类,也就是不是指针类型的。然后再定义一个类实现的是A类的指针。


调用时,普通类也可以用,指针类也可以调用普通类中的方法。
火山视窗封装视频教程
回复

使用道具 举报

28

主题

2218

帖子

8018

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
8018
6#
发表于 昨天 18:35 | 只看该作者
没有那么方便的,因类调用成员用点,指针调用成员用->
你还是得封装两个。

你可以在指针了写个属性读方法 "值",里面将指针解引用为对象,调用就这样:

指针变量.值.成员方法()
回复

使用道具 举报

231

主题

1728

帖子

7139

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
7139
QQ
7#
 楼主| 发表于 昨天 18:47 | 只看该作者
Xelloss0618 发表于 2025-5-2 18:35
没有那么方便的,因类调用成员用点,指针调用成员用->
你还是得封装两个。

是这样嘛,我感觉不对啊

火山视窗封装视频教程
回复

使用道具 举报

28

主题

2218

帖子

8018

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
8018
8#
发表于 昨天 18:57 | 只看该作者
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-3 21:59 , Processed in 0.094633 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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