我正在尝试创建一个实际上类似于 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