I'm worried about all those void *s as they move responsibility for type
safety and lifecycle management to the user. I'd much rather see a
QObject (or Object) with the following methods:
clone() - deep copy an object; dicts will store copies so we'll avoid
those leaks or a dictionary member modified after it was stored
destroy()
type() - return the type
as_dict(), as_string(), as_int() - convert to a subclass so its
methods can be used
Consider an operation such as printing out the dictionary, you have to
know the types of the values.
I was thinking in doing a little bit different.
My next patchset (phase 2) will introduce the QType (or QObject)
data type, as you have suggested in the QMP thread. This one will
have all those methods to convert from int, string, dict etc.
Then the dictionary can store it and the user can provide
a iterator to print the objects.
So, the point here is where to have the high-level data type
conversion: in the dict itself or in a higher layer (QObject).
I slightly prefer to have them in the QObject, this way the
dict is more flexible and simpler, capable of storing anything.
But I don't known where the clone() method should be, maybe in
both?