使用C++构建最简单的动态类型系统

本文探讨了如何在C++中构建动态类型系统,通过使用字符串表示类型、成员和值,实现动态添加成员和方法。文章介绍了核心概念,包括用字符串表达类型信息,存储成员名字和值,并展示了如何处理消息传递。尽管动态类型系统存在额外的存储开销,但提供了灵活性。动态与静态类型系统的差异主要在于类型信息的存储时机,选择哪种取决于应用需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了说明动态类型系统和静态类型系统之间的差异和联系,这里简单叙述一下如何使用静态类型系统来构建动态类型系统。这个任务类似于为一门新的语言设计类型系统。所以如果你发现这个动态类型系统类似于你使用过的任何OO系统,请原谅我。应为所有的动态类型系统都是类似的,而且其背后的机理完全相同,只是实现上的差异而已。

 

先列出OO的核心技术,这样在我们设计的时候可以时刻对比我们是不是在这样做。

* 使用类来表达概念

* 使用消息在类之间传递信息

 

我们动态类型系统的期望目标很简单,那就是可以动态添加成员和方法。有了这个,我们就可以实现几乎所有的动态系统的特性了,如不特定消息发送,避免虚函数调用的开销,更简单的函数覆盖实现等等。

 

动态的类型系统,那就意味着运行时我们有一切的类型信息。所有我们需要把类型信息以合适的方式存储起来。在C++中,基础的类型就有十几种,更不要说用户创建的更多类型了。怎么办呢?简单想一下,就明白,我们只要一简单的字符串表达类型即可。不是使用字符串本身的类型,而是使用字符串对象的内容,不同的内容表示不同的类型即可。于是,我们可以说,对象Foo有如下的成员,其类型为“double”,其名字为weight,其值为94.5。可以看到,我们需要三个不同维度的东西来表达一个成员。C++中之需要两个就可以了,类型信息是静态的,编译期会处理。所以,这里的核心是:把类型信息表达为数据。

 

另一方面,C++成员的名字的硬编码的,在执行的时候,这些名字已经被地址替代了。这不是我们想要的,所以,我们要进一步把成员

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值