如果我正确理解了这个问题,那么基本上你所说的是一个多路复用器。即将多个信息流合并为一个。这可以使用查找表轻松实现,具体实现取决于您。
您可以将各种输入流组合成一个关键对象。我在下面包含了一些代码,但没有时间检查/运行它,所以请将其视为伪代码而不是逐字记录。
使用地图
struct MyKey
{
MyKey( bool X, bool Y, bool Z, bool SC1, bool SC2 ) :
X_(X), Y_(Y), Z_(Z), SC1_(SC1), SC2_(SC2) {}
bool X_;
bool Y_;
bool Z_;
bool SC1_;
bool SC2_;
};
您还需要一个operator<()
函数才能在关联容器中使用它。然后您设置一个映射集合,例如地图:
typedef enum foo FooEnum;
std::map< MyKey, FooEnum > myMap;
此地图需要在您的应用程序启动并加载时进行设置,如下所示:
myMap.insert( std::make_pair< MyKey, FooEnum >( MyKey(true,false,true,false,false), XandZ ) );
这仅映射 X 和 Z ,XandZ
因此您需要对每个排列进行此操作。
一旦你来做检查,你所需要的就是:
std::map< MyKey, FooEnum >::const_iterator it = myMap.find( MyKey(X,Y,Z,SC1,SC2) );
if ( it != myMap.end() )
{
enum foo valueINeed = it.second;
// ...
使用向量/数组
对此有一些变化。例如,您可以将输入流的值组合为掩码中的位(此处为 5 位),并使用 32 个元素的数组或向量将每个排列映射到单独的元素。
如果你这样做,你甚至可以在编译时创建集合。尽管您必须对其进行测试,但它可能也会运行得更快一些。缺点是代码可能更深奥一点,但同样没有禁止文档的法律!