【问题标题】:How can I add the override keyword to a large C++ codebase?如何将 override 关键字添加到大型 C++ 代码库?
【发布时间】:2015-07-01 23:01:44
【问题描述】:

我有一个包含数千个源文件的大型 C++ 代码库。我想在适当的地方添加 override 关键字。我的一些明显被覆盖的函数实际上并没有覆盖基类中的任何函数,我想抓住这些,或者至少让它们脱颖而出。

我尝试手动执行此操作,但代码库太大。我尝试使用 clang-modernize,但它没有提供有用的说明。我还担心它无法理解为 Visual Studio 编写的代码库。

如何在我的代码库中添加 override 关键字,而不需要花费人工周或更长时间?

【问题讨论】:

  • 我无法理解。您目前的具体情况是什么,为什么需要改变它?
  • @RedRoboHood:我将其解释为希望将已经运行的代码迁移到现代最佳实践(以帮助防止出现错误)。
  • @OliverCharlesworth 是的,我明白;我在询问有关他的具体问题的更多详细信息。不过,我想我现在明白了(我将overrideoperator 混淆了一分钟)。
  • @RedRoboHood 我发现了几个实例,其中基类虚拟声明和最终派生类之间的函数签名不匹配。我确信有更多实例,我想在我的代码库中解决这类问题。如果我能找到一种经济实惠的方式来添加关键字,那么 override 关键字将主要解决我的问题。这有意义吗?
  • @Sophit 是的,谢谢你的澄清。

标签: c++ overriding


【解决方案1】:

clang-modernize 似乎已移至支持这一点的clang-tidy

示例代码(test.cpp):

struct Base {
    virtual void reimplementMe(int a) {}
};
struct Derived : public Base  {
    virtual void reimplementMe(int a) {}
};

clang-tidy 调用(试运行):

clang-tidy-6.0 -checks='modernize-use-override' test.cpp -- -std=c++11

真正修复你的代码(确保有一个有效的备份):

clang-tidy-6.0 -checks='modernize-use-override' -fix test.cpp -- -std=c++11

给予:

struct Base {
    virtual void reimplementMe(int a) {}
};
struct Derived : public Base  {
    void reimplementMe(int a) override {}
};

注意:使用了来自this great article 的示例——查看详细说明并检查它是next part,它描述了如何转换更大的项目。

祝你好运!

【讨论】:

    猜你喜欢
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2019-07-26
    相关资源
    最近更新 更多