在 c++ 中优化 if 大小写以调用成员函数

Optimizing if case in c++ for calling member functions

提问人:amutamil 提问时间:11/2/2023 最后编辑:amutamil 更新时间:11/3/2023 访问量:117

问:

HRESULT Block::SendAlarm(const std::string& variableName, USHORT value)
{
    if (variableName == aAtt_name_Fault)      builder.Alarms().Fault(value);
    if (variableName == aAtt_name_BATT)       builder.Alarms().BATT(value);
    if (variableName == aAtt_name_PWR)        builder.Alarms().PWR(value);
    if (variableName == aAtt_name_OCCLUSION)  builder.Alarms().OCCLUSION(value);
 ... many if statements follows
        
        return S_OK;
}

我有上面的代码,其中 builder 是 Ventilator 对象,Alarms() 是 builder 的成员类和对象。现在比较输入字符串并调用构建器的成员函数。alarms() 使用 If 条件。还有其他更好的方法可以做到这一点吗?

C++ IF-语句 优化 代码重复

评论

2赞 463035818_is_not_an_ai 11/2/2023
为什么你认为这需要以“更好”的方式完成?什么是“更好”?
5赞 BoP 11/2/2023
一个轻微的改进是用于在找到匹配项后停止比较。而且,如果一个选项非常常见,您可以将其放在首位。else if
4赞 JeJo 11/2/2023
可以是 s 的 a 作为枚举键和指向类的成员函数的指针作为值吗?std::mapvariableNameAlarms
2赞 Some programmer dude 11/2/2023
除了要使用的“自然”更改之外,您是否对优化的构建进行了测量和基准测试,以确保这是程序中的前两三个瓶颈之一?如果不是,则可能不需要重构此代码。else if
2赞 Some programmer dude 11/2/2023
如果你总是无条件地返回相同的值,那么也许你根本不需要返回一个值?

答: 暂无答案