首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >压缩switch语句?

压缩switch语句?
EN

Stack Overflow用户
提问于 2012-04-24 04:42:58
回答 3查看 303关注 0票数 0

有一段时间我一直在想,因为它似乎在我经验不足的代码中突然出现了很多。

我有一些经常使用switch语句的代码,但它真正做的就是每次访问不同的队列。

代码语言:javascript
运行
复制
void store(int toSwitchOn, float posx, float posy){ 
    myDataStruct newValue;
    newValue.psX = posx;
    newValue.psY = posy;

    switch(toSwitchOn){
        case 1:
            queue1.push(newValue);          
            break;
        case 2:
            queue2.push(newValue);          
            break;
        case 3:
            queue3.push(newValue);
            break;
        case 4:
            queue4.push(newValue);
            break;
        case 5:
            queue5.push(newValue);
            break;
    }


}

每条语句中唯一变化的是队列变量。有没有什么巧妙的方法来压缩这种重复的代码?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-24 04:44:27

将你的队列存储在一个向量中。

代码语言:javascript
运行
复制
std::vector<std::queue<someType> > queues (5);
//fill vector with your 5 queues

//this replaces the switch:
if (toSwitchOn >= 1 && toSwitchOn <= 5)
    queue [toSwitchOn - 1].push (newValue);
else
    //default switch case
票数 5
EN

Stack Overflow用户

发布于 2012-04-24 04:51:24

代码语言:javascript
运行
复制
std::vector<std::queue<someType> > queues (5); 
//toSwitchOn is of type size_t and zero indexed.
... 
if (toSwitchOn < queues.size())
   queue [toSwitchOn].push (newValue);  //0 - 1 = undefined land...     
else     //default switch case 
票数 0
EN

Stack Overflow用户

发布于 2012-04-24 05:09:45

显而易见的答案是用要打开的东西的vectormap查找来替换switch

然而,我认为整数和向量索引之间的耦合是一个泄漏的接口。

我想知道这个函数的调用者是如何知道要使用哪个整数值的。谁告诉他们该用什么?它们是否只是被赋予了一个对Storage对象的引用呢?

替换:

代码语言:javascript
运行
复制
int function_telling_which_index_to_use_for_storage();

通过以下方式:

代码语言:javascript
运行
复制
Storage* storage_to_use();

然后你可以说:

代码语言:javascript
运行
复制
Storage* storage = storage_to_use();
// ...
storage->store(posx, posy);

记住:封装,封装,封装。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10287980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档