假设您有一个虚构的类型系统,用于用 C++ 编写的虚构脚本语言(例如),并且脚本语言中的每个类型(和对象)在底层实现语言中都有对应的类型(和对象)。这个假想的类型系统中的基类是一个名为 Object 的类,所有其他类都必须派生自这个类。现在,您有另一个名为 HashTable 的类,它是所有变量存储的基础(我可能说错了):命名空间通过 HashTables 实现(将一个对象与另一个对象关联),全局变量通过 HashTables 存储,并且,问题的关键,实例变量也存储在HashTables中。
实例变量是这样的,每个对象都有一个 HashTable 来存储它的实例变量。但是,HashTable 必然是从 Object 派生的,因此每个 HashTable 都有一个 HashTable 来存储其实例变量。每个 HashTable 的每个 HashTable 都有一个 HashTable,以此类推。
我的问题是,这种类型系统可以在底层 C++ 代码中以面向对象的方式实现吗?如果不采取任何预防措施,程序将进入一个无限循环并在仅仅实例化对象时导致堆栈溢出,因为它将实例化一个哈希表,该哈希表将调用其父对象的构造函数,这将实例化一个哈希表......
对于这个设计缺陷,是否有任何可行的解决方法,不涉及破坏所需的 OO 设计(每种类型在底层代码中都有其推论类型)?
请原谅这篇文章中的语法,英语不是我的第一语言,我可能无法以可理解的方式解释某些内容。