【发布时间】:2013-03-14 00:00:20
【问题描述】:
我知道这个问题可能非常模糊,它是对我给 here 的答案的扩展。基本上,作为一个个人项目,我一直在尝试复制“代码优先”的习语,这在 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 调用。本质上,他们所做的只是向基类注册该字段,然后由基类完成真正的工作。我怎样才能完成这种事情,并将细节传递给基类,就像我在构造函数中指定的那样简单?
在I answered 的上一个问题中,由于 C++ 构造事物的方式,我能够提供基类信息。有没有办法可以在构造函数中利用它并摆脱可能会导致程序员错误的讨厌的field 调用?
在这一点上,我很高兴一切都运行良好,但我很想减少混乱并消除构造函数中这种“注册”过程的需要,并以某种方式让它们自动注册到基类中。
欢迎所有意见:)
编辑
field的实现是这样的:
void Record::field(detail::field_base& field) {
field.owner_ = this;
fields_.push_back(&field);
}; // eo field**
【问题讨论】:
-
如果你能展示
field()的实际作用以及它是哪个类的成员(我猜是Record,但这只是一个猜测),这将有所帮助 -
@AndyProwl,我已经修改了这个问题。除了将其推送到列表中以供稍后推荐之外,它几乎没有什么作用。
标签: c++ visual-c++ c++11