我有数百个函数,从手动 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++的工具?
我有数百个函数,从手动 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++的工具?
尝试创建 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);