2017-09-22 2 views
2

いくつかのパラメータの構造体含む、より大きなプロジェクトを想像してみて:パラメータとしてこの構造体では新しいメンバに関するコンパイラ強制実装の完全性のパターンはありますか?

struct pars { 
    int foo; 
}; 

を、他の機能は、例えば、実装されています。

// (de)serialization into different formats 
static pars FromString(string const &text); 
static string ToString(pars const &data); 
static pars FromFile(string const &filename); 
// [...] 

// comparison/calculation/verification 
static bool equals(pars l, pars r); 
static pars average(pars a, pars b); 
static bool isValid(pars p); 
// [...] 

// you-name-it 

今新しいメンバーがそれに追加する必要が想像します構造体:

struct pars { 
    int foo; 
    int bar; // new member 
}; 

必要なコード場所がすべて適用されるまで、ビルドを破棄したり警告を出したりするデザインパターンはありますか?

例:

  • 私はstring fooint fooを変更した場合、私は変更する必要がある任意のコード行を見逃すことはありません。
  • unsigned int fooに変更する必要がある場合は、fooからfoo_uに名前を変更して、コンパイラーに適応が必要な箇所を指摘できます。

一つの部分的な解決策は、会員のみすべてのパラメータで呼び出されなければならコンストラクタからprivateおよび設定可能なようにすることです:これは PARSの正しい作成を保証し

pars::pars(int _foo, int _bar) 
: foo(_foo), bar(_bar) 
{ } 

をではなく、 用法 - これはFromString()に不足している適応をキャッチしますが、ToString()には入りません。

ユニットテストでは、テスト中(コンパイル時のメソッドを探しています)、シリアライズされた部分だけが表示され、新しいbarは考慮されません(比較/計算/検証/ ...機能も同様)。

+0

マッチしたタグ、またはより良い見出しを自由に提案してください。 –

+0

は既にboost.serializationと他の多くのもので解決されています。 –

答えて

関連する問題