我知道这个问题可能很模糊,它是对我在这里给出的答案的扩展。基本上,作为一个个人项目,我一直在尝试复制“代码优先”的习语,这在 C# 程序员中很流行做数据库工作,但在 C++ 中。一切都很棒,而且运作良好。
C# 的一大优点是诸如属性之类的东西。我们在 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**