Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用C+中的函数调用替换cast+;_C++_Casting_Refactoring - Fatal编程技术网

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样式的转换将导致数千次错误否定,不幸的是,我不想选择。我想替换一个特定的类型转换。”你最好一个接一个地修改它们(这样会减少错误)。“我没有你那么自信,哈哈哈:)