更改对未弃用方法C 的参考
Changing references to deprecated methods C++
我有一些在我的代码库中弃用的方法,我知道我应该如何替换它们,是否有任何方法可以自动执行此操作?我正在使用Visual Studio 2015 Update 3,但我愿意使用其他文本编辑器...
代码看起来像这样:
// Deprecated method
myFunction(char* firstParam, char* secondParam = NULL);
// New method, same name, different params
myFunction(char* firstParam, bool flag, char* secondParam = NULL);
我只想要可以用对第二个功能的引用来代替对第一个函数的所有引用。即:
myFunction( "hello", "world");
// Replace with
myFunction( "hello", true, "world");
和
myFunction("hello");
// Replace with
myFunction("hello", true);
和
myFunction("hello", isTrue); // isTrue is a bool here
// Do not replace with anything
和
myFunction("hello", world); //world is a char* here
// Replace with
myFunction("hello", true, world);
我使用Visual Studio甚至其他文本编辑器开放解决方案。我不手动这样做的原因是代码库太大。
更改旧函数以调用新函数,该参数为true(在旧的上方声明新函数):
): // Deprecated method
myFunction(char* firstParam, char* secondParam = NULL)
{
myFunction(firstParam, true, secondParam);
}
您也可以将其内联,因此编译器将在适当的情况下为您更改代码:)
您可以使用DMS的DMS来源转换来使用我们的DMS软件重新设计工具包进行此操作。
dms parses(C 17/visualStudio2015)源代码应用于AST,应用了源代码转换,可修改树,结果AST被漂亮地打印为再生(修改)源代码。这允许一个人以可靠的方式自动化代码在大型代码库上更改。
DMS重写OP的示例规则将看起来像:
rule add_true_to_hello_world()
:functioncall->functioncall
= "myFunction( "hello", "world");"
-> "myFunction( "hello", true, "world");";
rule add_true_to_call_with_literal_string(s: STRING)
: functioncall->functioncall
= "myFunction(s)"
-> "myFunction(s, true);"
rule add_true_when_char_star(i:IDENTIFIER,s:STRING, a:argument):
:functioncall->functioncall
= "i(s,a);"
-> "i(s, true, a)"
if IsCharStart(a);
ruleset replace_deprecated_calls =
{ add_true_to_hello_world,
add_true_to_call_with_literal_string,
add_true_when_char_star
}
breif说明:规则具有表格
rule name(metavariable): syntaxclass->syntaxclass
lefthandside -> righthandside if condition ;
规则具有名称,因此人和规则集可以方便地引用它们;有时,一个人可能有成千上万的规则来进行非常复杂的转换。规则具有参数,指定规则内允许哪种类型的Metavariables(书面 V)。" functionCall-> functionCall"符号表示我们将函数调用转换为函数调用而不是其他内容。C 文本周围的报价标记是 meta 引用了DMS Rule Text中的c 文本的划分,使我们需要使用 '的实际C 字面字符串引用标记。案例非散布;不能总是足够聪明]。
规则集仅将它们的规则分组为一个组。未显示的是使用规则集的微不足道的DMS调用。
您可以在上面的链接中阅读有关规则语法的更多信息。
我对他的规则的实施与OP所表达的不同。他的示例仅显示一个函数调用作为语句(请注意";在他的示例中)发生更改,但他在文本中写道,他想替换所有功能调用。因此,这些规则是关于功能调用的更改,而不是语句。OP的第一条规则我完全按照他的示例所示。仅当函数调用实际上具有这些参数字符串文字时,它才能起作用。我的第二个规则我概括了允许任意的文字弦,而不仅仅是"世界"。我推广的第三个规则允许任意函数名称并添加了他指示的类型检查。
请注意,该模式匹配实际上是通过语法树而不是原始文本发生的。DM不会被评论中的函数呼叫或不同的惠特设计/格式化而愚弄。
使用" edit | find& replace replace in files中"怎么样?"你好",world "你好",是的,world
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- 类的方法和对象。参考?智能指针?简单的初始化?
- C 将方法和字段带入外部范围,而无需明确的参考
- 为什么未调用具有常量参考返回值的超载方法
- 是否有一种方法可以始终通过值(制作副本)而不是在使用类成员函数时通过参考来传递
- std ::函数方法参考无法将dword投入到dword64
- 是否有一种方法可以避免在RVALUE和LVALUE参考中创建功能时避免重复的代码
- 通过方法返回的重新选择参考
- C++方法需要参考,无法让Cython提供
- 分配从方法返回到变量的参考
- 返回JSONDOC作为方法的参考
- 我如何验证2种模拟方法以相同的参考调用
- 传递向量作为参考的正确方法是什么
- 更改对未弃用方法C 的参考
- 正确的方法返回getter中的字符串参考
- STD :: Atomic Load方法与STD :: shared_ptr一起使用时会减少参考计数
- 将当前对象传递到方法,参考或指针
- 有什么方法可以将指针指向参考