Il ven 30 ott 2020, 21:03 Eduardo Habkost <ehabk...@redhat.com> ha scritto:
> > OBJECT_CLASS_PROPERTY_ADD_STR(oc, MachineState, kernel_filename, > > "kernel", prop_allow_set_always); > > I like the idea of having an interface like this, but I would > like to avoid having to write even more boilerplate for each > property type to make this work. > > What would you think of: > OBJECT_CLASS_PROPERTY_ADD(oc, > PROP_STRING("kernel", MachineState, kernel_filename), > prop_allow_set_always); > > Then we could make the same PROP_STRING macro usable both as > object_class_property_add_static() argument and as initializer > for existing static Property arrays. > The name should be an argument to OBJECT_CLASS_PROPERTY_ADD though (which could be a function and not macro; perhaps object_class_property_add_field?). PROP_STRING would be DEFINE_PROP_STRING(NULL, etc.) and would not be entirely reusable in Property arrays. But even with that snag I agree with your less-boilerplate argument against my proposal. Since most if not all device properties would have to specify the same allow-set function, we would end up defining more macros DEVICE_CLASS_PROPERTY_ADD_STR, and so on. If the Property isbpassed a struct, instead, we can define just one wrapper device_class_property_add_field. So what about: 1) add new constructors without the DEFINE prefix and without the name argument 2) add object_class_property_add_field And later: 3) add device_class_property_add_field and remove dc->props 4) remove the name field from Property. Paolo > -- > Eduardo > >