C++ 用C+中的函数调用替换cast+;
重构/替换强制转换的工具或方法的任何建议,例如:C++ 用C+中的函数调用替换cast+;,c++,casting,refactoring,C++,Casting,Refactoring,重构/替换强制转换的工具或方法的任何建议,例如: (type*) data 进入: 当数据中有更高优先级的运算符、括号或换行符时,事情会变得更棘手: (type*) a(b)-> c 应该变成convert_to_type(a(b)->c)而不是convert_to_type(a)(b)->c等等。有点认为这会在你脸上爆炸,但是: template<typename T> T myFunc() { // do stuff retu
(type*) data
进入:
当数据中有更高优先级的运算符、括号或换行符时,事情会变得更棘手:
(type*) a(b)->
c
应该变成convert_to_type(a(b)->c)
而不是convert_to_type(a)(b)->c
等等。有点认为这会在你脸上爆炸,但是:
template<typename T> T myFunc()
{
// do stuff
return (T) retVal;
}
template T myFunc()
{
//做事
返回(T)返回;
}
我不知道有哪种工具能够正确地自动解析和替换这些内容
我所知道的最好的选择是将g++与-Wold-style cast
一起使用,这将有助于警告您所有此类C-style cast,允许您通过分析相关代码来正确处理它们。这显然要比工具花费更多的时间,但它也给了你一个机会来检查和防止工具做错误的转换。 在这种情况下,你将需要一个语义感知的C++解析器。没有那么多工具
事实上,我唯一能想到的就是叮当声。使用,您可以编写一个程序来检索对应于C样式转换的AST节点,然后发出文本替换。因为Clang的AST是完全语义感知的,所以您可以访问正在转换的表达式、它的类型以及它转换到的类型
在“工具”或“附加”部分中有一些示例,例如,您可以查看该工具以进行匹配和替换
注意:如果你沿着这条路走下去,你会想结识你的朋友
重构/替换强制转换的工具或方法的任何建议,例如:
(type*) data
不应该有。这个问题很复杂,当创建C++(STATIC、CAST、CaskC铸造等)时,他们的一个明确目标是“它们应该很容易在代码中找到,使用自动化工具。”
在某些情况下,在确定一对括号是否用于算术运算(括号用于运算符优先级)、强制转换或其他操作之前,工具需要进行完全解析
您最好一个一个地更改它们(这样会减少错误)
如果您的代码库很大,您也可以为此编写自己的工具(gcc对此有警告,因此应该很容易找到)。静态转换(数据)
或类型转换重载!?还要注意,(type*)数据
是C样式转换。在大多数情况下,您应该使用的是静态转换(数据)
或动态播放(数据)在处理多态类型时,@他/他正在自动地做它。当然,用正则表达式,你不能做到这一点,因为C++是不规则的。因此,唯一想到的就是创建一个基于CLAN的智能工具。你当然必须解析一些C++。我不确定它是否需要COM。请用叮当声,但它可以。毕竟,你不想改变像int function(type*);
。他不是问如何定义这样的函数,他是问如何自动替换所有类型转换。-Wold样式的转换将导致数千次错误否定,不幸的是,我不想选择。我想替换一个特定的类型转换。”你最好一个接一个地修改它们(这样会减少错误)。“我没有你那么自信,哈哈哈:)