gilbertc
gilbertc

Reputation: 1069

Does C++ have a static polymorphism implementation of interface that does not use vtable?

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.

Upvotes: 6

Views: 1163

Answers (2)

rmeador
rmeador

Reputation: 25696

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).

Upvotes: 0

wheaties
wheaties

Reputation: 35970

Yes. It goes by the moniker CRTP. Have a gander.

Upvotes: 7

Related Questions