【发布时间】:2012-12-20 06:58:32
【问题描述】:
我正在尝试创建一个实际上类似于 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 并具有其虚函数。
你有什么想法吗?我很乐意听取您的建议。
【问题讨论】:
-
你还没有说
list_type::get(n)应该返回什么。第n个元素? n 型的第一个元素?什么? -
“用户可以在执行期间创建一个新的 [...] 类型”——如何?
-
@BenjaminLindley:名称的使用方式与 Python 中使用的方式相同。这只是实现。
-
@n.m.:我写过我现在尝试创建一种新的玩具语言。但我想以后我可以添加创建新类的可能性。
标签: c++ arrays types vector type-conversion