如何在没有现有数据库的情况下缩短现有 C++ 代码

施洛普林

我在一个项目中发现了一些(stuipd)重复的 If-Else 代码。现在我正在寻找缩短和更改代码的想法。问题是,不允许使用数据库或其他东西。值必须在代码中。有人想缩短以下代码吗?我的想法是使用地图,但我不确定这是否可行。

if ( a_lFittingOption == FitO_P_BASIC_TT)
{
    if ( dLengthComp > 2000.0 )
        dValue = 1130.0;
    else if ( dLengthComp > 1800.0 )
        dValue = 930.0;
    else if ( dLengthComp > 1450.0 )
        dValue = 780.0;
    else if ( dLengthComp > 870.0 || Null( dLengthComp - 870.0 ))
        dValue = 455.0;
}
else if ( a_lFittingOption == FitO_P_BASIC_TT_RC2 || a_lFittingOption == FitO_P_BASIC_TT_RC1) // 170 mm RC1/RC2
{
    if ( dLengthComp > 1450.0 )
        dValue = 850.0;
    else
        dValue = 455.0;
}
else if ( a_lFittingOption == FitO_P_BASIC_TT_250mm_S)// 170 mm ( S+ Auswahl 250 ) Basic Simply Smart
{
    if ( dLengthComp > 2000.0 )
        dValue = 1130.0;
    else if ( dLengthComp > 1800.0 )
        dValue = 930.0;
    else if ( dLengthComp > 1450.0 )
        dValue = 800.0;
    else if ( dLengthComp > 930.0 || Null( dLengthComp - 930.0 ))
        dValue = 485.0;
}
else if ( a_lFittingOption == FitO_P_BASIC_TT_250mm_S_RC2 || a_lFittingOption == FitO_P_TT_250mm_S_RC1) // 170 mm ( S+ Auswahl 250 ) RC2 Simply Smart
{
    if ( dLengthComp > 2000.0 )
        dValue = 1130.0;
    else if ( dLengthComp > 1800.0 )
        dValue = 930.0;
    else if ( dLengthComp > 1450.0 )
        dValue = 901.0;
    else if ( dLengthComp < 1450.0 || Null( dLengthComp - 1450.0 ))
        dValue = 485.0;
}

return dValue;

谢谢,对于任何信息和/或想法。我不想有一个完整的代码,只是想解决问题。

P克莱默

像这样的东西将能够清理你的代码:

#include <iostream>
#include <map>
#include <functional>

double basic_tt(const double dLengthComp)
{
    double dValue{};

    if (dLengthComp > 2000.0)
        dValue = 1130.0;
    else if (dLengthComp > 1800.0)
        dValue = 930.0;
    else if (dLengthComp > 1450.0)
        dValue = 780.0;
    else if (dLengthComp > 870.0) // || Null(dLengthComp - 870.0))
        dValue = 455.0;

    return dValue;
}

const long FitO_P_BASIC_TT = 1;

int main()
{
    std::map<long, std::function<double(const double)>> selected_function
    {
        { FitO_P_BASIC_TT, basic_tt} // extend map here for each strategy
    };

    auto dValue = selected_function[FitO_P_BASIC_TT](3.1);
    

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不破坏现有客户端代码的情况下将类转换为模板类(c++17 之前)?

C#:如何在没有“复制/粘贴”代码的情况下重写它

在没有多态的情况下优化C代码大小

EF 6.0代码优先:如何将现有数据库与现有域类同步

我如何在没有增强的情况下将C ++ 11代码转换为C ++ 98?

如何使用c#中的现有数据库创建新数据库?

如何避免先使用Entity Framework代码和现有数据库进行迁移?

如何在不复制现有代码的情况下将现有DNN模块导入新模块?

如何在没有boost_timer的情况下将boost :: asio代码完全转换为C ++ 11 / asio?

如何在不访问源代码的情况下从现有 Java 应用程序中检索实时数据?

现有数据的REST响应代码

在WPF应用程序中如何在没有主类的情况下初始化数据库(使用Entity Framework进行代码优先)

使用现有数据库的实体框架代码优先迁移策略

首先选择向导中缺少的现有数据库代码

现有数据库一对一映射列错误的代码优先

从ASP.NET MVC中的现有数据库生成种子代码

ASPNETBOILERPLATE .Net Core 模板 - 现有数据库代码示例请求

现有数据库的代码优先,Context.Set <T>不起作用

如何在没有库的情况下使Quicksort代码稳定?(Java)

为什么在没有类型不匹配错误的情况下编译此代码(C ++ 11)?

在没有管理员特权的情况下运行C#代码的性能低下

EF代码优先,现有数据库位于另一个数据库上

如何在不更改.NET Desktop App中现有加密代码的情况下使用WinRT进行解密?

如何在没有数学库的情况下在 C++ 中创建复利公式?

如何在Visual Studio 2010中使用DEF文件从现有C ++代码生成DLL

如何在C#中调用将文本添加到现有代码中的函数?

C - 如何 (*(void (*)()) 代码); 在没有任何调用的情况下在 C 程序中运行

现有C代码中的C命令行参数

创建mysql连接时C#.NET(WPF,DIGITALOCEAN)现有数据库未知