gpt4 book ai didi

c++ - 如何根据一对枚举的值选择一个 Action ?

转载 作者:行者123 更新时间:2023-11-30 04:19:11 26 4
gpt4 key购买 nike

我正在用 C++ 实现一个协议(protocol)模型(特别是缓存一致性协议(protocol),但这对这个问题无关紧要)

协议(protocol)有两个值:previous_statemessage_type。两者都是枚举。协议(protocol)应该为两个输入的每个组合选择一个唯一的 Action 。一些组合无效(应该显示错误),一些组合要停止。

用 C++ 编写上述场景的好方法是什么?我可以想到:两个嵌套的开关 block 来选择输入组合,并调用作为函数实现的特定操作。 p>

有没有更优雅、更灵活的方式来编写上述场景?理想情况下,从协议(protocol)中添加/删除输入组合应该很容易。

感谢您的任何建议。 (我是设计模式的新手,不知道适合这里的任何内容)

最佳答案

让我们假设这两个枚举是 32 位值。我会做这样的事情:

void doit(E1 previous_state, E2 message_type) {
# define COMBINE(_x_, _y_) (static_cast<int64_t>(previous_state) << 32 | message_type)
switch (COMBINE(previous_state, message_type) {
case COMBINE(e1value1, e2value1):
// ...
break;
case COMBINE(e1value4, e2value3):
// ...
break;
// ... more cases ...
default:
// report error
}
}

不要假设这会生成更快的代码——switch 语句通常被优化为跳转表,但像这样的技巧可能会打败它。如果您最感兴趣的是最佳性能,则必须进行试验并找出最适合您系统的性能(请注意,将 int64_t 更改为较小的类型并最小化我示例中的偏移可能会产生一些影响)。

关于c++ - 如何根据一对枚举的值选择一个 Action ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15996673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com