object: Improve documentation of interfaces
commit55deffdb5ca626689b3e08d7e9adeab9f0e5ad5f
authorGreg Kurz <groug@kaod.org>
Wed, 11 Dec 2019 13:32:41 +0000 (11 14:32 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 17 Dec 2019 18:32:46 +0000 (17 19:32 +0100)
tree2cb8b9e786c4bd1b427592f1c62a2519b3768b06
parent3d24244b11cbb1bcb2582ed3625f20c6ecd85b1a
object: Improve documentation of interfaces

QOM interfaces allow a limited form of multiple inheritance, at the
condition of being stateless. That is, they cannot be instantiated
and a pointer to an interface shouldn't be dereferenceable in any way.
This is achieved by making the QOM instance type an incomplete type,
which is, as mentioned by Markus Armbruster, the closest you can get
to abstract class in C.

Incomplete types are widely used to hide implementation details, but
people usually expect to find at least one place where the type is
fully defined. The fact that it doesn't happen with QOM interfaces is
quite disturbing, especially since it isn't documented anywhere as
recently discussed in this thread:

https://lists.gnu.org/archive/html/qemu-devel/2019-12/msg01579.html

Amend the documentation in the object.h header file to provide more
details about why and how to implement QOM interfaces using incomplete
types.

Signed-off-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
include/qom/object.h