Listing 1

class Address
{
BEGIN_REFLECTION(Address)
DEF_REFLECTED_ATTRIBUTE(std::string, Street)
DEF_REFLECTED_ATTRIBUTE(unsigned int, HouseNo)
DEF_REFLECTED_ATTRIBUTE(std::string, City)
DEF_REFLECTED_ATTRIBUTE(std::string, ZipCode)
DEF_REFLECTED_ATTRIBUTE(std::string, Country)
END_REFLECTION
};
enum CredibilityType {PaysAlwaysInTime, PaysSomeTimesInTime, PaysNever};
class Client
{
public:
BEGIN_REFLECTION(Client)
DEF_REFLECTED_ATTRIBUTE(std::string, Name)
DEF_REFLECTED_ATTRIBUTE(std::vector<Address>, Addresses)
DEF_REFLECTED_ATTRIBUTE(CredibilityType, Credibility)
END_REFLECTION
};