事実上 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__
、ユーザーが関数を使用して 2 つの型を比較したい場合に使用されます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
次の3 つの要素を含むがあるとします[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