final
ヘッダー ファイルで C++11 キーワードを条件付きで標準バージョンに有効にすることは良い考えですか? 私は次のようなことを考えています:
#if __cplusplus >= 201103L
# define MY_FINAL final
#else
# define MY_FINAL
#endif
// ...
class Derived : public Base
{
public:
virtual int f() MY_FINAL;
};
ここで 2 つの疑問があります。
- ある方法とない方法
final
がABI互換であるかどうか(私にはそう仮定するのが合理的であり、簡単なチェックでそれがg++
確認されます)、 - 誰かがメソッドをオーバーライドしようとしても、C++98 コンパイラは文句を言いません。しかし、メソッドをオーバーライドしないように文書化することで、これを処理できると思います。