更改对未弃用方法C 的参考

Changing references to deprecated methods C++

本文关键字:方法 参考      更新时间:2023-10-16

我有一些在我的代码库中弃用的方法,我知道我应该如何替换它们,是否有任何方法可以自动执行此操作?我正在使用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