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++ に変換するツールはありますか?

4

1 に答える 1

1

2 つの正規表現を作成してみてください。

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

最初からグループ 1 を一致させると、次のようになります。

 Type1 t1, Type2 t2, int i

この出力に対して 2 番目を実行すると、グループ 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);
于 2011-07-30T05:01:45.357 に答える