【发布时间】:2013-05-21 10:59:11
【问题描述】:
我编写了一个非常基本的表达式解析器,我希望它是可扩展的,因此它可以解析用户定义的表达式类型。
例如,如果在解析时遇到字符<,我想创建一个用于解析以该字符开头的表达式的类的实例。
我有两个问题:
-
如何将字符关联到静态方法指针?
我想使用一个静态方法来返回类的一个新实例,因为我无法获得指向类构造函数的指针。以下语法可能是错误的,但这就是想法:
typedef static IValue * (*returnPtrIValue)(); map<char, returnPtrIValue> ... -
假设我有 A 类,并且 B 类扩展 A 类,我可以初始化一个指向函数的指针,该函数返回指向 A 的指针/引用,并使用指向返回指向 B 的指针/引用的函数的指针,因为 B 是一个A?
例如,我可以这样做:
typedef A * (*returnPtrA)(); B * func() { ... } returnPtrA foo = func;
【问题讨论】:
-
解析是由所有对象共享的
class方法/函数完成的,那为什么每次都要创建一个类的新实例呢?只需存储与<关联的类的全局对象并使用其方法即可。 -
因为在我设计解析器的方式中,表达式是一个从一段字符串中解析出自身的对象。
-
如果您有兴趣编写解析/词法分析器,我建议您查看
libclang,例如stackoverflow.com/questions/14509120/any-tutorial-on-libclang
标签: c++ function pointers methods static