gpt4 book ai didi

c++ - 多开关盒设计模式

转载 作者:行者123 更新时间:2023-11-30 05:41:29 31 4
gpt4 key购买 nike

我有多个 switch 语句

switch(condition1)
{
case 1:
doSomething;
break;

case 2:
doSomething;
break;

default
break;
}

--

 switch(condition2)
{
case 1:
doSomething;
break;

case 2:
doSomething;
break;

default
break;
}

条件可能会在未来增加,例如。 condition3, condition4 即可以有更多的 switch 语句。所以我需要可扩展性。

我想合并这些 switch 语句。我不想使用很多 if,else 条件。中间没有返回语句来中断流程。没有动态内存分配。没有多维数组。

例如。

result = someOperation(condition1, condition2, condition3...)

switch(result)
{
case 1:
doSomething;
break;

case 2:
doSomething;
break;

default
break;

}

具体来说,我想生成多个整数的唯一组合。不想进行字符串比较。我更喜欢在某种设计模式中隐藏全部功能(不过我没能找到。)

最佳答案

The conditions can increase in future eg. condition3, condition4 i.e more switch statements can be there. So i need scalability.

[comment:] Strategy pattern will work, but how will i choose which strategy to choose.

考虑一下:

class operation // strategy base
{
public:
virtual bool applies(int result) const = 0;
virtual void perform() = 0;
virtual ~operation() = 0;
};

class first_case: public operation // choose better name than first_case
{
public:
bool applies(int result) const override
{
return result == 1; // equivalent of "case 1:"
}
};

// other cases defined here

客户端代码:

void do_stuff()
{
// std::vector<std::unique_ptr<operation>> operations; defined else-where

auto result = someOperation(condition1, condition2, condition3...);

for(auto &op: operations) // equivalent of your switch above
if(op.applies(result))
{
op.perform();
break;
}
}

基本上,您将策略选择标准作为操作基础上的虚拟 API 来实现(并针对每个操作对其进行专门化)。

关于c++ - 多开关盒设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31133260/

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