On 08/30/2011 07:06 PM, Steven Schveighoffer wrote:
On Tue, 30 Aug 2011 12:55:30 -0400, Timon Gehr <timon.g...@gmx.ch> wrote:

On 08/30/2011 06:23 PM, Steven Schveighoffer wrote:
On Tue, 30 Aug 2011 12:18:32 -0400, Timon Gehr <timon.g...@gmx.ch>
wrote:

On 08/30/2011 06:00 PM, Steven Schveighoffer wrote:
On Tue, 30 Aug 2011 11:58:43 -0400, Timon Gehr <timon.g...@gmx.ch>
wrote:

On 08/30/2011 05:49 PM, Christophe wrote:
The fact that the code compile only if all interface methods are
implemented does not imply that the programmer knows which method he
implemented hooks and which does not.

interface I{
void method();
}

class C: I{
void method() {} // not a hook.
}

Why not? All a "hook" is is adding an entry into a base class' vtable.
This is no different, it's just the base "class" is an interface.

-Steve

As far as I can tell, a hook is overwriting an existing entry.

Nothing is "overwritten", what's written into the table is decided at
compile-time.

-Steve

It is conceptually "overwritten" at compile time: Copy vtable from
parent and replace the overriden entries.

And that's no different from implementing an interface, or an abstract
class that does not implement an interface completely -- copy the vtable
and overwrite the entries.

interfaces don't possess an own vtable. It is created from scratch for each class implementing the interface.


Reply via email to