Boost logo

Boost :

From: Jim (kctan_tw_at_[hidden])
Date: 2003-10-29 00:57:15


I have written a tool to adapt old properties class, for example:

typedef BOOL int;

struct OldProperties
{
BOOL bFoo;
};

and we can adapt it like this:

class new_properties
{
public:
new_properties() : foo(old_prop.bFoo) {}

boost::property_adapter<bool, BOOL> foo;

private:
OldProperties old_prop;
};
new_properties new_prop;

then we can set and get property as follow:

new_prop.foo = true;
bool foo = new_prop.foo;

We can decide the read/write policy like this:

boost::property_adapter<bool, BOOL, boost::read_only_tag> read_only_foo;
boost::property_adapter<bool, BOOL, boost::write_only_tag> write_only_foo;

default the policy tag is read_write_tag.

We also can decide what the get and set operation are:

struct bool_to_BOOL
{
BOOL operator()(bool src) const
{
return src ? 1 : 0;
}
};
struct BOOL_to_bool
{
bool operator()(BOOL src) const
{
return !!src;
}
};

boost::property_adapter<bool, BOOL, boost::read_write_tag, bool_to_BOOL,
BOOL_to_bool> foo;

If we cannot decide what type the source is, we can write as follow:

boost::any_property_adapter<BOOL> foo;

and we can use all features of property_adapter like this:

boost::property_adapter<BOOL, boost::read_write_tag, bool_to_BOOL,
BOOL_to_bool> foo;


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk