我正在尝试创建一个实际上类似于 Python 对象的list
对象。在我的代码中,我有以下类:object_type
, type_type
, none_type
, bool_type
, int_type
, float_type
, ,抽象类bytes_type
在哪里。object_type
抽象类有一些虚函数,如type_type __type__(void)
, bytes_type __name__(void)
, bytes_type __repr__(void)
, bool_type __bool__(void)
, int_type __int__(void)
, float_type __float__(void)
, bytes_type __bytes__(void)
.
type_type
类有以下构造函数:type_type(object_type*)
; 在构造过程中,指向源对象的指针被存储到object_type* type_type::__cdata__
并在用户想要使用type_type::__eq__(const type_type&)
函数比较两种类型时使用(这个函数使用typeid
你可能已经猜到了)。
我需要创建list_type
对象,它可以存储任何基于object_type
. 它必须具有__get__(const int_type&)
获取元素的__set__(const int_type&, object_type*)
功能和设置元素的功能。所有对象都存储在std::vector<object_type*> __cdata__
.
如何强制list_type::__get__(const int_type&)
返回正确的对象?假设我们有list_type
,其中包含三个元素:[bytes_type object0, int_type object1, float_type object3]
. 使用list_type::__get__(0)
应该返回bytes_type object0
。功能type_type object_type::__type__()
可能很有用。
用户可以object_type
在执行期间创建新的基于类型的困难(我所描述的所有内容都用于创建新的玩具语言)。然而,所有类型都基于object_type
并具有其虚函数。
你有什么想法?我很高兴听到你的建议。
PS git 仓库:https ://github.com/ghostmansd/quirinus