0

我拥有从手动java到C++端口的数百个函数。在结果C++代码,我想改变由值传递的参数通过参考通过:自动更改按值传递以通过引用

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

优选地离开原始类型诸如整型,浮点不变。

任何重构工具来自动执行此过程?一些正则表达式技巧?

或者任何将便携式java代码转换为C++的工具?

回答

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);