【问题标题】:Automatically change pass-by-value to pass-by-reference自动将按值传递更改为按引用传递
【发布时间】:2011-08-12 08:02:00
【问题描述】:

我有数百个函数,从手动 java 到 c++ 端口。在结果 c++ 代码中,我希望将按值传递的参数更改为按引用传递:

from:
void funcName1( Type1 t1, Type2 t2, int i);
to:
void funcName2( Type1& t1, Type2& t2, int i);

最好保持 int、float 等基本类型不变。

是否有任何重构工具可以自动执行此过程?一些正则表达式技巧?

或者任何将可移植java代码转换为c++的工具?

【问题讨论】:

    标签: regex refactoring reference pass-by-reference pass-by-value


    【解决方案1】:

    尝试创建 2 个正则表达式:

    void\s+\w+\(([^\)]+))
    ([A-Z]\w+)\s+\w+
    

    第一个匹配组 1 将为您提供:

     Type1 t1, Type2 t2, int i
    

    对这个输出运行第二个,第 1 组将是:

     Type
    

    如果您使用的是 java,您可以通过以下方式快速转换:

    Pattern p = Pattern.compile("(void\\s+\\w+\\s+\)(([^\\)]+))");
    Pattern p2 = Pattern.compile("([A-Z]\\w+)(\\s+\\w+)");
    Matcher m = p.matcher("input.....");
    
    StringBuffer sb = new StringBuffer();
    while(m.find()) {
       Matcher m2 = p2.matcher(m.group(0));
    
       StringBuffer sb2 = new StringBuffer();
       while(m2.find()) {
          m2.appendReplacement(sb2, "$1&$2")
       }
       m2.appendTail(sb2);
    
       m.appendReplacement(sb, "$1("+sb2.toString()+")")
    }
    m.appendTail(sb);
    

    【讨论】:

      猜你喜欢
      • 2012-01-16
      • 2012-10-14
      • 2014-08-23
      • 2015-05-23
      • 1970-01-01
      • 2016-10-22
      • 2023-03-02
      相关资源
      最近更新 更多