Автоматическое изменение передачи по значению на передачу по ссылке - PullRequest
0 голосов
/ 25 апреля 2011

У меня много сотен функций от ручного 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 ++?

1 Ответ

1 голос
/ 30 июля 2011

Попробуйте создать 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);
...