【发布时间】:2017-06-02 17:11:08
【问题描述】:
我有一个定义了一些成员的类 DealSchedule,现在我必须用类似的东西来初始化它:
DealSchedule trf_schedule;
trf_schedule.site_ = site;
trf_schedule.deal_id_ = deal_id;
trf_schedule.payment_date_ = payment_date;
trf_schedule.ccy1_ = ccy1;
trf_schedule.ccy2_ = ccy2;
有没有可能写得很好
DealSchedule trf_schedule
{
site_ = site;
deal_id_ = deal_id;
payment_date_ = payment_date;
ccy1_ = ccy1;
ccy2_ = ccy2;
};
这将保护对初始化的更改。
我可以做出这样的事情(需要 c++14 支持在 lambda 捕获中重命名):
DealSchedule trf_schedule;
[&_=trf_schedule]()
{
_.site_ = site;
_.deal_id_ = deal_id;
_.payment_date_ = payment_date;
_.ccy1_ = ccy1;
_.ccy2_ = ccy2;
}();
【问题讨论】:
-
你只有5个成员要初始化,为什么不让它成为构造函数的一部分呢?所以你可以这样称呼它
trf_schedule = { site, deal_id, payment_date, ccy1, ccy2 }; -
试图避免随着成员列表的增长而更新构造函数。 @Fireboyd78
-
啊,我明白了。不幸的是,在 C++ 中并没有真正的方法可以按照您想要的方式进行操作,最好的办法是使用构造函数重载。
-
先做你的设计,这将减少“随着成员列表的增长”的努力
-
您可以利用聚合初始化。 What is Aggregate Initialization?点击链接,看看聚合初始化是否适合你!
标签: c++ initialization