C++ 吗?有一个不使用 vtable 的接口的静态多态实现吗?
C++ 是否有不使用 vtable 的接口的正确实现?
例如,
class BaseInterface{
public:
virtual void func() const = 0;
}
class BaseInterfaceImpl:public BaseInterface{
public:
void func(){ std::cout<<"called."<<endl; }
}
BaseInterface* obj = new BaseInterfaceImpl();
obj->func();
最后一行对 func 的调用转到 vtable 来查找 BaseInterfaceImpl::func 的 func ptr,但是有没有任何 C++ 方法可以直接执行此操作,因为 BaseInterfaceImpl 不是除纯接口类 BaseInterface 之外的任何其他类的子类?
谢谢。 吉尔.
Does C++ have a proper implementation of interface that does not use vtable?
for example
class BaseInterface{
public:
virtual void func() const = 0;
}
class BaseInterfaceImpl:public BaseInterface{
public:
void func(){ std::cout<<"called."<<endl; }
}
BaseInterface* obj = new BaseInterfaceImpl();
obj->func();
the call to func at the last line goes to vtable to find the func ptr of BaseInterfaceImpl::func, but is there any C++ way to do that directly as the BaseInterfaceImpl is not subclassed from any other class besides the pure interface class BaseInterface?
Thanks.
Gil.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的。它的名称为 CRTP。看看吧。
Yes. It goes by the moniker CRTP. Have a gander.
我认为在任何语言中,除非它在编译时知道需要调用什么函数,否则都必须使用类似于 vtable 的某种形式才能进行动态分派。这可能是巧妙的编译器优化的结果,或者是诸如 CRTP(wheaties 已经提到过)之类的技术的结果。
I think in any language, it's going to have to go to some equivalent of a vtable in order to do dynamic dispatch unless it knows at compile time what function needs to be called. This could be the result of a clever compiler optimization, or a technique such as CRTP (which wheaties already mentioned).