【问题标题】:How do I select a variable based on an argument?如何根据参数选择变量?
【发布时间】:2015-02-22 03:39:25
【问题描述】:

我正在处理一项任务,其中,我收到一个字符串列表作为函数中的参数。根据列表中包含的字符串,我必须对记录进行一些处理。列表中包含的字符串对应于 Record 类中的成员变量。然而,每次调用 doProcessing() 时,list 参数可能包含不同数量的字符串。以下是我的代码的简化版本:

  class Record{
            string str1;
            string str2;
            ...
            string strn;
            }; // end Record class
 class Process{
          void doProcessing(Record* rec, set<string> strList){
           if(strList.find("abc") == rec->str1){
              //do something
              }
            if(strList.find("def") == rec->str2){
              //do something
              }
               ........
           }
       }; // end Process class

这里,每次调用 doProcessing 时,strList 都会有所不同。根据情况,它可能只包含 1 个字符串或 n 个字符串。

我认为设计本身存在缺陷。请提出一个好的设计来处理这种情况。我拥有所有课程,因此设计更改没有问题。

【问题讨论】:

  • 您能否查看有关set&lt;String&gt;::find 在不同场景(元素存在/不存在)中返回什么的文档?

标签: c++


【解决方案1】:
  1. 将函数强制放入类不会使过程代码面向对象。
    为什么doProcessing不是免费功能?

  2. 当参数不是可选的或数组时,使用引用而不是指针。

  3. 考虑遍历集合,using a switch for string-matching

  4. 您确定记录中的数据类型是正确的,并且您不只是落入stringly-typed programming 的陷阱吗?
    还可以考虑在此处使用std::tuplestd::array

但也有:std::set.find 返回一个迭代器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    相关资源
    最近更新 更多