xto*_*ofl 5 c++ frameworks declarative
我经常面临将一个 API 的参数空间映射到另一个 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 } };
}
Run Code Online (Sandbox Code Playgroud)
其中映射通常是这样完成的
switch( a ){
case( A::A1 ): switch( b ) {
case( B::B1 ): return A1B1;
case( B::B2 ): return A1B2;
....
}
Run Code Online (Sandbox Code Playgroud)
而且这个映射仍然需要一个“反向”开关。
但我更喜欢“密集”的东西
declare( source( A::A1, B::B1 ), target( AB::A1B1 ) );
declare( source( A::A1, B::B2 ), target( AB::A1B2 ) );
....
Run Code Online (Sandbox Code Playgroud)
有没有人见过这样的技术或框架或库?
您可以使用Boost.Bimap,它提供两种类型之间的双向映射。
它有一点运行时开销(通常,与std::map为此目的使用一对 s 所获得的开销大致相同,但这并不是很多)。
不过,它确实允许您定义与示例一样密集的映射;通常,您只需将对添加到地图中,一次一对。