Часто я сталкиваюсь с проблемой отображения пространства параметров одного API на пространство параметров другого. Часто я вижу, что это решается с помощью вложенных вложенных операторов switch.
И мне было интересно, будет ли библиотека или методика, которая позволит вам «объявлять» отображение вместо «программировать» его.
Тривиальный пример состоит в объединении значений двух перечислений в одно:
namespace sourceAPI {
struct A { typedef e { A1, A2, A3 } };
struct B { typedef e { B1, B2 } };
}
namespace targetAPI {
struct AB { typedef e { A1B1, A1B2, A2B1, A2B2, A3B1, A3B2 } };
}
В котором отображение часто выполняется как
switch( a ){
case( A::A1 ): switch( b ) {
case( B::B1 ): return A1B1;
case( B::B2 ): return A1B2;
....
}
И для этого сопоставления все еще нужен переключатель «назад».
Но я бы предпочел что-то «плотное», как
declare( source( A::A1, B::B1 ), target( AB::A1B1 ) );
declare( source( A::A1, B::B2 ), target( AB::A1B2 ) );
....
Кто-нибудь видел такую технику, каркас или библиотеку?