C ++是否具有不使用vtable的接口的静态多态实现?

时间:2010-04-06 19:09:17

标签: c++ interface vtable static-polymorphism

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?

感谢。 吉尔。

2 个答案:

答案 0 :(得分:7)

是。它以绰号CRTP为准。有一个雄鹅。

答案 1 :(得分:0)

我认为在任何语言中,除了在编译时知道需要调用哪个函数之外,它必须转到某个等效的vtable才能进行动态调度。这可能是一个聪明的编译器优化或CRTP等技术的结果(已经提到过这些技术)。