Я преобразовываю часть своего кода из JS в C ++, поэтому мне нужно реорганизовать прямое назначение переменных экземпляра в методы установки:
a.xx=3;
в a->setXx(3);
а также методы получения:
...a.xx...
в ...a->getXx()...
В настоящее время я использую shelljs (node.js) для преобразований.
Пример команды для переименования функции из oldMethod () в newMethod ():
sed('-i', /\boldMethod[ ]*\(/g, 'newMethod(', filename);
Предпочтительно, я бы использовал ту же технику для сеттеров / геттеров. Однако я открыт и для других приемлемых подходов.
Мои проблемы:
Я не уверен, как установить правильные условия для методов получения. Там нет четкого выражения, как X=Y;
Я не могу просто повернуть все alphanum.alphanum
в получатели, потому что это также заменит неправильные выражения, например a("foo.doo");
Мои предложения:
а. все равно сделайте это и вручную обновите неправильные замены
б. предоставить набор допустимых имен переменных, например, "tag|possition|rotation|..."
В C ++ мы менее ценим использование «геттеров» и «сеттеров», поскольку на самом деле они делают немного больше, чем обходят, хотя и соблюдают инкапсуляцию.
Там нет ничего плохого в использовании a->xx=3;
сделав xx
член public
, Это упростит ваши конверсии.
Мое решение состоит в том, чтобы перечислить все известные методы. Это менее гибко, но работает.
var inf = process.argv[2];
sed('-i', /\b([a-zA-Z0-9_]+)\.tag[ ]*=[ ]*(.+);/g, '$1->setTag($2);', inf);
sed('-i', /\b([a-zA-Z0-9_]+)\.tag\b/g, '$1->getTag()', inf);
sed('-i', /\b([a-zA-Z0-9_]+)\.z[ ]*=[ ]*(.+);/g, '$1->setZ($2);', inf);
sed('-i', /\b([a-zA-Z0-9_]+)\.z\b/g, '$1->getZ()', inf);
sed('-i', /\b([a-zA-Z0-9_]+)\.pos[ ]*=[ ]*(.+);/g, '$1->setPos($2);', inf);
sed('-i', /\b([a-zA-Z0-9_]+)\.pos\b/g, '$1->getPos()', inf);