ネットワーククライアントとサーバーの両方で操作を管理するためのコードがあります。しかし、ここでは、クライアントまたはサーバーによって排他的に呼び出されるいくつかの関数があり、誤ってサーバー上でクライアント関数を呼び出す(またはその逆)ことはバグの大きな原因です。C++の派生関数にコードを自動的に追加するには
これらの種類のプログラミングエラーを減らすために、関数にタグを付けて、誤用された場合には騒ぎを起こさせようとしています。私の現在の解決策は、クライアントまたはサーバーが必要としないメンバーにアクセスする場合、アサートを呼び出す各関数の開始時に単純なマクロです。しかし、これはクラスの複数の派生インスタンスがある場合に問題になります。すべての子クラスでクライアントまたはサーバー側として実装にタグを付ける必要があります。
基本クラスの仮想メンバのシグネチャにタグを入れて、一度タグ付けするだけで、繰り返し忘れてエラーにならないようにすることができます。基本クラスの実装にチェックを入れ、base :: functionNameのようなものを参照することを検討しましたが、これは、すべての実装に関数呼び出しを手動で追加する必要がある限り、同じ問題になります。理想的には、デフォルトのコンストラクタのように、親バージョンの関数を自動的に呼び出すことができます。
誰かがC++でこれを達成する方法を知っていますか?私が検討すべき代替アプローチがありますか?
ありがとうございます!その後、Base::doit()
の実装はそれが適切な環境で呼び出されていていることを確認するためのチェックを行うことができ
class Base {
public:
void doit(const Something &);
protected:
virtual void real_doit(const Something &);
};
class Derived: public Base {
protected:
virtual void real_doit(const Something &);
};
、および:
あなただけの基本クラスに共通のコードを考慮し、それらからのサーバークラスとクライアントクラスを派生ないのはなぜサーバー/クライアント – Falmarri
のための異なるコードおよび/またはクラスを持つべきであるように聞こえますか? – Puppy