私は多くのコンクリート構造体を持っており、フィールドをオプション(存在または非存在)として指定したいと思います。これを達成するために人々がどのようなアイデアを持っているのか疑問に思っています。構造体の例を次に示します(フィールドは他の構造体でもかまいません。構造体のベクトルでもかまいません)。
struct LogonMessage_t
{
Header_t header; // this points to another struct containing all primitives
std::string username;
std::string password;
std::vector<LogonOption_t> LogonOptions;
int subaccountid;
std::string Text;
}
すべてのフィールドをデフォルトで非表示にし、おそらくセッターで1つずつ有効にします。これらの構造体が生成されるため、一般的な方法が望ましいでしょう。
これまでの私の考えは次のとおりです。
- フィールドが設定されているかどうかを示すフィールドのビットマップ
- 番兵の値を使用します(std::stringの場合は"\0"、intの場合は-1、floatの場合は-1.0f
- 各フィールドをカプセル化して、設定されているかどうかを示す、ある種のテンプレートコンテナ/プロキシ、アイデアはありますか?これが最善のアプローチかもしれないと思います。
ところで、フィールドをカプセル化するためにマップまたは他のSTLコンテナを使用することは、ここでは機能しません。それらは具体的な構造体である必要があります。