この質問は非常に漠然としている可能性があることを知っています。これは、私がここで提供した回答を少し拡張したものです。基本的に、私は個人的なプロジェクトとして、データベース作業を行う C# プログラマーに人気のある「コード ファースト」イディオムを C++ で再現しようと試みてきました。すべてが素晴らしく、うまく機能します。
C# の優れた点の 1 つは、属性などです。C++ にはそのような目新しさはないので、データベースで構造化される特定のクラスのコードは次のようになります。
class User : public Record {
public:
User(Model& m) : Record(L"_user", m)
, Username(L"_userName", 32, false)
, Nickname(L"_nickName", 32, false) {
field(Username);
field(Nickname);
}; // eo ctor
Field<String> Username;
Field<String> Nickname;
}; // eo class User
field
理想的には、コンストラクター内の呼び出しを取り除きたいです。基本的に、彼らが行うことは、実際の作業を行う基本クラスにフィールドを登録することだけです。この種のことを達成し、コンストラクターで指定したのと同じくらい簡単に基本クラスに詳細を渡すにはどうすればよいでしょうか?
私が答えた前の質問では、C++ が物事を構築する方法のおかげで、基底クラスの情報を提供することができました。field
これをコンストラクターで活用して、プログラマーのエラーを引き起こす可能性のある厄介な呼び出しを取り除く方法はありますか?
この時点で、すべてがうまく機能していることに満足していますが、混乱を減らし、コンストラクターでのこの「登録」プロセスの必要性を取り除き、何らかの方法でそれらを基本クラスに自動的に登録したいと考えています。
すべての意見を歓迎します:)
編集
したがって、の実装field
は次のとおりです。
void Record::field(detail::field_base& field) {
field.owner_ = this;
fields_.push_back(&field);
}; // eo field**