utility: generic Init and InitState classes
authorPatrick Ohly <patrick.ohly@intel.com>
Mon, 21 Nov 2011 14:58:50 +0000 (15:58 +0100)
committerPatrick Ohly <patrick.ohly@intel.com>
Mon, 28 Nov 2011 09:18:18 +0000 (10:18 +0100)
commit0201707a7591980c4b7d306472d10453261d24e7
tree3e1caa5c5388ac1d793f19b85f3d203d2a250b94
parent4fc6c3e2c424d5b13a86b5030b1b2407eb007ec3
utility: generic Init and InitState classes

The purpose of the older Bool class was to a) initialize the
underlying boolean when used as class member and b) to track whether
the value was ever set explicitly.

This patch adds the same functionality for all scalars (default
initialized with the help of Boost::value_init) and classes.

The user has to choose manually between InitState (for scalars) and
InitStateClass (for classes). The advantage of InitStateClass is that
it is derived from the base class, which allows easier access to the
base class methods: code which expected the base class still works.

For scalars it is sometimes necessary to cast into the base type or
use the get() method.

It would be nice if template specialization could be used to expose
just one InitState class. Boost::type_traits has a is_scalar member,
but all examples are about using that for specialization of functions
and it wasn't immediately obvious how that would extend to classes.
Perhaps sometime later inspiration will strike...
src/syncevo/util.h