是否有技术/库允许具有类层次结构(具有函数)的灵活性,但一旦在运行时virtual
确定对象类型,就允许函数调用的虚拟化?
举一个简单的例子,假设我有一个程序从某个配置文件中读取形状类型(圆形、矩形、三角形等),以构建所述形状的某种数据结构(例如,vector<shape*>
):
class shape {
public:
virtual void draw() const = 0;
// ...
};
class circle : public shape {
public:
void draw() const;
// ...
};
// ...
vector<shape*> shapes;
显然,如果我想绘制所有的形状,我可以这样做:
for ( auto&& s : shapes )
s->draw();
每次完成这样的迭代时,都会调用shapes
一个virtual
函数来调用draw()
每个形状。
但是假设一旦shapes
创建,在程序的整个生命周期内都不会再改变;并进一步假设这draw()
将被多次调用。如果知道实际形状后,有一种方法可以draw()
在运行时“去虚拟化”对 的调用,那就太好了。
我知道在编译时virtual
去虚拟化函数调用的优化技术,但我不是在问这个。
如果有一个聪明的技巧可以直接在 C++ 中执行此操作,我会感到非常惊讶,因为这样做的一种方法是在运行时修改内存中的机器代码。但是那里有一些 C++ 库可以实现这样的事情吗?
我想这样的事情可能通过 LLVM 成为可能,因为它允许在运行时生成机器代码。有人为此使用过 LLVM 吗?也许是一个分层在 LLVM 之上的框架?
注意:解决方案必须是跨平台的,即至少使用 gcc/clang和VC++。