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 foo
にint foo
を変更した場合、私は変更する必要がある任意のコード行を見逃すことはありません。 - を
unsigned int foo
に変更する必要がある場合は、foo
からfoo_u
に名前を変更して、コンパイラーに適応が必要な箇所を指摘できます。
一つの部分的な解決策は、会員のみすべてのパラメータで呼び出されなければならコンストラクタからprivate
および設定可能なようにすることです:これは PARSの正しい作成を保証し
pars::pars(int _foo, int _bar)
: foo(_foo), bar(_bar)
{ }
をではなく、 用法 - これはFromString()
に不足している適応をキャッチしますが、ToString()
には入りません。
ユニットテストでは、テスト中(コンパイル時のメソッドを探しています)、シリアライズされた部分だけが表示され、新しいbar
は考慮されません(比較/計算/検証/ ...機能も同様)。
マッチしたタグ、またはより良い見出しを自由に提案してください。 –
は既にboost.serializationと他の多くのもので解決されています。 –