Am 18.06.2012 15:46, schrieb Peter Crosthwaite: >>>> +#define HERBIVORE(obj) \ >>>> + INTERFACE_CHECK(Herbivore, (obj), TYPE_HERBIVORE) >>>> + >>>> +typedef struct Herbivore >>>> +{ >>>> + Object obj; >>>> +} Herbivore; >>> >>> >>> All this is doing is saying Herbivores are Objects right? A user cant >>> add anything to this struct given that interfaces are stateless so >>> could this be simplified to >>> >>> typedef Object Herbivore; >> >> >> This is admittedly a little wierd... >> >> Interfaces don't exist as Objects in QOM. > > Not in the sense that they used too, but all objects that implement an > interface are still OBJECTs just through the inheritance path of their > concrete class, which is the point of this struct yes? > > They are just classes. But it's >> very handy to be able to have a Herbivore type that you can cast objects to. >> > > Yes I agree in full, but the typedef definition is functionally > equivalent to what you have there, and removes the temptation to add > fields to the object type. Having a skeletal struct there gives the > illusion to readers that interface objects are in someway extensible.
Why have a typedef at all then? You can just use Object directly. If that ever changes it leads to all kinds of problems (well, necessary adjustments), as seen in the pci_host series. Andreas -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg