【问题标题】:Is there a way to flag (at compile time) "overridden" methods whose signatures don't match base signature?有没有办法标记(在编译时)签名与基本签名不匹配的“覆盖”方法?
【发布时间】:2010-10-08 04:20:27
【问题描述】:

基本上,我希望在我的 C++ 代码中使用其 override 关键字的 C# 编译器功能。

class Base
{
   virtual int foo(int) const;
};

class Derived : public Base
{
   virtual int foo(int); // wanted to override Base, but forgot to declare it const
};

众所周知,上面的代码可以正常编译,但会产生一些奇怪的运行时行为。我希望我的 C++ 编译器能够用 C# 的 override 关键字之类的东西来捕捉我糟糕的实现。是否在 C++ 中引入了诸如“覆盖”之类的关键字,或者我们是否坚持使用 #define override virtual 来表明我们的意图? (实际上,我不这样做 - 我讨厌使用预处理器来“扩展”语言)。

【问题讨论】:

    标签: c++ virtual overriding


    【解决方案1】:

    据我所知,这在当前标准下是不可能的。你可以在即将到来的 C++0x 中做到这一点。更多详情请看这里:Explicit virtual function overrides

    【讨论】:

    • 每次我发现一些关于 C++0x 的东西时,我都会发现语法越来越丑陋……肯定是我自己吧?
    【解决方案2】:

    如果你等不及 C++0x,Visual C++ 已经有了这个 override 关键字。 (我相信自 2005 年以来)。那里的语法是:

    virtual int foo(int) override;
    

    但是,您不必输入它。它是一个非标准的微软扩展。

    【讨论】:

    • 向 Naveen 道歉——你的答案是正确的“未来”答案;但是,对于我目前的需求(我使用 VS2005),这行得通!我将此答案标记为“回答”我的问题,但 +1 Naveen 的回答
    猜你喜欢
    • 2018-01-15
    • 2020-07-06
    • 1970-01-01
    • 2021-04-12
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多