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 для нахождения func ptr BaseInterfaceImpl:: func, но там какой-либо C++ способ сделать это непосредственно, поскольку BaseInterfaceImpl не разделяется на подклассы ни от какого другого класса помимо чистого интерфейсного класса BaseInterface?

Спасибо. Gil.

6
задан gilbertc 6 April 2010 в 19:21
поделиться

2 ответа

Да. Он известен под названием CRTP . Посмотри.

7
ответ дан 17 December 2019 в 00:06
поделиться

Я думаю, что на любом языке, чтобы выполнить динамическую отправку, он должен будет перейти к некоторому эквиваленту vtable, если только он не знает во время компиляции, какую функцию нужно вызвать. Это может быть результатом умной оптимизации компилятора или такого метода, как CRTP (о котором уже упоминалось).

0
ответ дан 17 December 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: