- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试用 C++ 编写一种玩具语言。我对语法使用了 boost spirit,并希望对解析器/词法分析器使用 boost spirit。这个想法是一种玩具语言,其中“一切都是对象”,如 javascript 和一些基于原型(prototype)的继承实现。我想知道如何在 C++ 中为该语言实现“对象”类型。我看到了引擎 spidermonkey 的源代码,但大部分是使用结构完成的,在后期阶段也会变得更加复杂。由于结构或多或少等同于 C++ 中的类,我希望我可以使用 stdlib 本身进行管理。我想要的只是关于必须如何实现基本对象以及如何创建/修改/销毁属性的扎实想法。我试着看一下 V8,但它真的让我很困惑!
最佳答案
让每个类都有指向父类的指针并在 STL 容器中实现属性和方法,如 <string,pointer_fun>
这样您就可以动态添加/删除方法。
然后你可以在 obj 中查找一个方法,如果不存在则跟随 ptr 到父级并在那里查找直到你找到一个或失败不存在的方法。
对于属性,您可以使用一个模板将它们包装在 STL 容器中,以便它们共享一个共同的祖先,并且您可以存储像 <string,property<type>* >
这样的指针。其中属性使创建的类型继承自普通类型。
通过这种方法和一些运行时检查,您可以动态地支持任何东西,只需要清楚在对象中调用方法时哪些是方法的查找规则。
所以基本上你系统中的每个 obj 实例都可以是:
class obj{
type_class parent*;
string type;
std::map<string,pointer_fun> methods;
std::map<string,property_parent_class> properties;
}
并且构造函数/析构函数是具有特殊名称的普通方法。
然后在 obj 创建中,您可以在 type_objs 中查找 type_name 并将成员和属性从类型复制到 impl obj。
编辑:关于函数对象,可以使用functors继承自一个通用的方法以使用 container_of_pointers 方法。
对于列表,我会创建一个简单的类对象来实现像 __add__()
这样的方法。或 __len__()
或 __get__()
例如在 python 中,那么当你解析你要替换的语言时 list_obj[3]
对于 your_list_obj.method['__get__']
在检查它当然存在之后。
关于c++ - 如何为玩具语言实现对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1770813/
我不会说谎。这是一道作业题。但是,就我而言,积分已经消失了。现在,我只是在寻找答案,因为我-认为-我可能疯了。 这个程序的目标是执行命令ps -A | grep(输入字符串) | wc -l 以类似于
我有兴趣编写玩具 DVCS。 要研究的最小 DVCS 是什么? (我不需要 ssl、ssh、svn 兼容性等......它应该能够做本地存储库) 最佳答案 Git 的实际核心相当小。不幸的是,它不是用
近年来,低代码平台非常火,尤其是Mendix和Outsystems的收购及融资后,很多人越来越相信,低代码平台或将成为继云计算之后,又一个千亿级赛道。 什么是低代码平台 那么什么是低代码平台
我是一名优秀的程序员,十分优秀!