0

我正在将部分代码从 JS 转换为 C++,因此我需要将直接实例变量赋值重构为 setter 方法:

a.xx=3;a->setXx(3);

还有getter方法:

...a.xx......a->getXx()...

目前我使用shelljs (node.js)进行转换。将函数从 oldMethod() 重命名为 newMethod() 的示例命令:

sed('-i', /\boldMethod[ ]*\(/g, 'newMethod(', filename);

最好我会使用与 setter/getter 相同的技术。但是,我也愿意使用其他可接受的方法。

我的问题:

  1. 我无法使标记的替换工作
  2. 我需要将第一个字母大写
  3. 我不确定如何为 getter 方法设置适当的条件。没有明确的表达方式,X=Y;我不能简单地将所有内容都alphanum.alphanum变成吸气剂,因为它也会替换不正确的表达方式,例如a("foo.doo"); 我的建议:

    一个。无论如何都要手动更新不正确的替换

    湾。提供一组有效的变量名,例如"tag|possition|rotation|..."

4

2 回答 2

3

在 C++ 中,我们对使用“getter”和“setter”并不那么珍贵,因为它们实际上只不过是在尊重封装的同时规避。

使用没有什么问题a->xx=3;,做了xx会员public。这将简化您的转换。

于 2016-08-24T08:08:41.103 回答
0

我的解决方案是列举所有已知的方法。它不太灵活,但它可以工作。

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);
于 2016-08-24T09:32:20.423 回答