, . , (, ).
- : .
, , .
. . , ++ 0x, , , , . , ..
, . , , .
. ( ) , , . , , "" Boost.Preprocessor.
:
DEFINE_CORRESPONDING_ENUMS(Server, Client,
((Server1, 1, Client1, 6))
((Server2, 2, Client2, 3))
((Common1, 4, Common1, 4))
((Common2, 5, Common2, 5))
((Server3, 7, Client3, 1))
);
, :
struct Server
{
enum type { Server1 = 1, Server2 = 2, Common1 = 4, Common2 = 5, Server3 = 7 };
};
struct Client
{
enum type { Client1 = 6, Client2 = 3, Common1 = 4, Common2 = 5, Client3 = 1 };
};
Server::type ServerFromClient(Client::type c)
{
switch(c)
{
case Client1: return Server1;
default: abort();
}
}
Client::type ClientFromServer(Server::type s)
{
}
, . , , , ;)
:
- - . .
- 4-. , ,
Common. , (, ...), . BOOST_PP_SEQ_FOREACH, .BOOST_PP_CAT .- on
gcc -E , ... - ,