我需要帮助来实现设计:
我在项目中声明了MessageID(整数宏)。每个MID与一个或多个源相关联(枚举0-19)。通过检查MID的每个源,我想调用不同的函数。我遵循以下方法:
typedef std::pair<int,unsigned int *> MIDPair;
- this binds MID(int) with sources(array of int)
typedef std::map<MIDPair,fpPtr> mapRSE;
- carries MIDpair with funtion pointer
最初我创建了不同的对(mid和具有适用源的数组)并使用适用的函数指针在map中推送它们。当我收到任何MID时,我会检查当前的来源并调用相应的功能。
如果我对所选择的cotainers的方法是正确的,或者建议我采用任何其他方法,请告诉我
答案 0 :(得分:0)
您的方法可行:
您需要使用lower_bound或upper_bound在地图中查找具有该MID值的键,但您不一定要在该位置拥有所需的源枚举值:您&# 39; ll必须使用该MID递增所有键,检查源值
效率可能并不太差,但确实涉及相当多的繁琐编码。
您可能会发现使用像以下容器更简单:
std::map<int, std::map<unsigned, fpPtr>> mapRSE;
然后,您可以致电mapRSE[mid][source]()
(或使用.at
或.find
,如果您不想在意外密钥上崩溃。)