我经常遇到将一个API的参数空间映射到另一个API的参数空间的问题。我经常看到通过嵌套的nested ... 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 ) );
....
有没有人看过这样的技术,框架或库?
最佳答案
您可以使用Boost.Bimap,它提供了两种类型之间的双向映射。
它有一些运行时开销(通常,为此目的使用一对std::map
会获得大致相同的开销,这不是很多)。
但是,它确实允许您像示例一样密集地定义映射。通常,您只需在 map 上添加一对,即可一次添加一对。