自动将按值传递更改为按引用传递

发布于 11-03 12:11 字数 304 浏览 6 评论 0原文

我有数百个函数,从手动 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++吗?

I have many hundreds of functions from a manual java to c++ port. In the result c++ code, I wish to change parameters passed by value to passed by reference:

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

Preferably leave the primitive types such as int, float unchanged.

Any refactoring tools to automate this process? Some regular expression tricks?

Or any tool that converts portable java code to c++?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眉目亦如画i2024-11-10 12:11:30

尝试创建 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);

Try creating 2 regular expressions:

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

Matching group 1 from the first will give you:

 Type1 t1, Type2 t2, int i

Run the second against this output and group 1 will be:

 Type

If you're using java, you can convert quickly with:

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文