ただ、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 件のコメント:
コメントを投稿