6

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++ 方法可以直接执行此操作,因为除了纯接口类 BaseInterface 之外,BaseInterfaceImpl 不是任何其他类的子类?

谢谢。吉尔。

4

2 回答 2

7

是的。它的名字是CRTP。看一眼。

于 2010-04-06T19:13:04.593 回答
0

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

于 2010-04-06T19:16:38.820 回答