On Wed, Apr 15, 2015 at 2:20 PM Andre Somers <an...@familiesomers.nl> wrote:
> On 15-4-2015 21:05, Keith Gardner wrote: > > > QPropertyGuard g{this}; >> > g.addProperty("a"); // use QObject::property >> > g.addProperty("b", m_b); // take value member by reference >> > g.addProperty(m_c, &cChanged); // ...and also slot address >> >> There's type erasure going on, so it will allocate memory. Allocating >> memory >> in a setter that might just change an int is what I call inefficient. >> > > Would something like this be better? > > // constructor > // Provide an initial value and a std::function to notify about the change > Property<bool> m_example = Property<bool>(false, [&](bool value){ > emit exampleChanged(value); > }); > > // getter > bool *::example() const { > return m_example; > } > > // setter > void *::setExample(bool value) { > m_example = value; > } > > The working code for this example can be found > https://github.com/kreios4004/Property_Class. > > Thank you for posting that. > > I took a look at it, but I am not sure it actually solves much. It moves > the check if something changed to the wrapped variable, but it makes using > that value then more complicated. Instead of using the variable directly, > one now has to go through m_example.getValue() everywhere. > This is partially true. If it is containing a class or a struct, then you are correct. If it is an int or float and you want to perform some math operation with it, it has the operator const T&() to perform the get automatically. > Not pretty, I think. The case of modifying more than one property in one > go is also not solved. On the one hand, dependent properties (such a > isValid property) are not updated unless you manually write that code > again, and on the other hand if you use this to set more than one property > in a method, you still are sending signals at the point the class is in an > inconsistent state. > True. My goal was to perform a type safe way of change detection so I wouldn't have to write the boilerplate code over and over. It also provides a way customize the way the signal is called in the callback. It does suffer in the more complex scenarios when more than one operation is happening to the object. > One nice side effect of my implementation is that the notification is > actually only send once. Even if the property value is changed multiple > times in the meantime, you still get only one notification. That can be > very convenient, even if you don't use it much. > This is very appealing.
_______________________________________________ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development