ただ、Google Test ではこの間違いにコンパイル時に気付けるようになってます。
その部分のコードがこちら
private: struct Setup_should_be_spelled_SetUp {}; virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; }
override つけたらいいやんって話ですが、まぁ…つけない人もいるわけで…
そんな人でもすぐに間違いに気付けるのがこのイディオムです。
サンプルコード:
class A { public: virtual void SetUp() {} private: struct Setup_should_be_spelled_SetUp {}; virtual Setup_should_be_spelled_SetUp* Setup() { return 0; } }; class Override : public A { public: void Setup() override {} void setup() override {} }; class NoOverride : public A { public: void Setup() {} void setup() {} }; int main() { return 0; }
override 付けた方は当然 Setup も setup もコンパイルエラーになります。
一方、override 付けなかった方も Setup がコンパイルエラーになっています。
いやー賢いですね。勉強になりました。
0 件のコメント:
コメントを投稿