JustBoo wrote:
I'm curious: Please name one *current* C++ compiler that does not use
vtables. Just asking.
Actually, I think you would be hard pressed to find any *current* C++
compiler which implements virtual functions as calling a function from
some table like the original CFront compiler did: the CFront virtual
function table is the what I would consider a vtable. Modern C++
implementations typically use things called "thunks" which e.g. do
appropriate pointer adjustments before effectively calling into a
a function looked up by the thunk. The key difference here is that
you could simply call a function obtained from a vtable using the
'this' pointer in CFront's implementations. You cannot do anything
like this with the data looked up by a thunk because you would first
need to adjust the position the 'this' pointer points to.
That is, while you could in principle (if there were an accessible
member called '_Vtable' to access the virtual function table) use
(obj->_Vtable[idx])(obj)
to call a virtual function without arguments using a vtable, you
cannot do anything like this with thunks. Also note that there are
different approaches to thunks: these could be small functions which
are really generated or the necessary operations could be applied
inline.
--
<mailto:di***********@yahoo.com> <http://www.dietmar-kuehl.de/>
<http://www.eai-systems.com> - Efficient Artificial Intelligence