2016-04-02 5 views
0

は、私が今オーバーライド - 少ないタイピングでそれを行うには?

class A 
{ 
public: 
    virtual void Muhahahaha(int a, float f, Object C, Smth else, Etc etc); 
}; 

class B: public A 
{ 
public: 
    virtual void Muhahahaha(int a, float f, Object C, Smth else, Etc etc) override; 
}; 

があると、どのような私を気にすることは、私は全体の引数リストに私は、基本クラスのメンバ関数をオーバーライドするたびに再入力する必要があるという事実です。なぜ私はちょうどこのような何か書くことができませんでした:

virtual void Muhahahaha override; 

をし、コンパイラはちょうど私が欲しいものを知っていますか?まあ、そこに1つだけMuhahahahaがある場合を除いて、もちろん...

このような方法はありますか?

+2

「このような方法がありますか?」いいえありません。 –

+1

マクロを使う(撮影しないでください); =) –

+0

タイピングを減らす最も簡単な方法は、派生クラスで 'virtual'を省略することです。 – juanchopanza

答えて

3

このような方法がありますか?

はい、ただし、決してこれを行う必要はありません。私はあなたにこのことを示し、そしてあなたがそれを行う場合、私はない

見て、私の評判は苦しむことになるだろう

...

I 約束

彼らはあなたを見せてくれるように私を下降させます...

お願いします。

[OK]を

#define OBFUSCATE Muhahahaha(int a, float f, double C, char etc) 

class A 
{ 
public: 
    virtual void OBFUSCATE; 
}; 

class B: public A 
{ 
public: 
    virtual void OBFUSCATE override; 
}; 

void A::OBFUSCATE 
{ 
    // try to debug this 
} 

void B::OBFUSCATE 
{ 
    // try to debug this too! 
} 
+0

私は約束しない:) – user3496846

1

問題は、単一の関数であまりにも多くのパラメータを取っているということです。これは、すべての機能(仮想かどうか)には悪いことです。

この問題を緩和するためによく働く解決策の例として、int a, float f, Object C, Smth else, Etc etcをクラスにバンドルしてみませんか?このように:

class A 
{ 
public: 
    virtual void Muhahahaha(Parameters const& arguments); 
}; 

class B : public A 
{ 
public: 
    void Muhahahaha(Parameters const& arguments) override; 
}; 

あなたは「全体の引数リストを毎回再入力する必要があり、」事実は単なる症状です:

struct Parameters 
{ 
    int a; 
    float f; 
    Object C; 
    Smth Else; 
    Etc etc; 
}; 

は、その後、あなたは何をするより少ないタイピングを持っています。引数リストが短くなるようにコードをリファクタリングすると、問題はすべて単独で消えます。

関連する問題