web-dev-qa-db-ja.com

'override'キーワードを強制する方法は?

Visual C++ 2012でC++ 11 overrideキーワードの使用を強制する方法はありますか?

(つまり、overrideと言うのを忘れた場合は、警告/エラーを受け取りたいと思います。)

50
user541686

C++ 11はほとんどあなたが望むものを持っていました。

元々、overrideキーワードは、より大きな提案( N2928 )の一部であり、その使用法を強制する機能も含まれていました。

class A
{
  virtual void f();
};

class B [[base_check]] : public A
{
    void f();  // error!
};

class C [[base_check]] : public A
{
  void f [[override]] ();  // OK
};

base_check属性は、overrideキーワードを使用せずに仮想関数をオーバーライドするとエラーになります。

関数が基本クラスの関数を非表示にすることを示すhiding属性もありました。 base_checkが使用され、関数がhidingを使用せずに基本クラスから1つを非表示にする場合、それはエラーです。

しかし、提案のほとんどは削除され、属性ではなく「特別な意味を持つ識別子」として、finalおよびoverride機能のみが保持されました。

22
Jonathan Wakely