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?
感谢。 吉尔。
答案 0 :(得分:7)
是。它以绰号CRTP为准。有一个雄鹅。
答案 1 :(得分:0)
我认为在任何语言中,除了在编译时知道需要调用哪个函数之外,它必须转到某个等效的vtable才能进行动态调度。这可能是一个聪明的编译器优化或CRTP等技术的结果(已经提到过这些技术)。