我有一个类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;
}();
答案 0 :(得分:2)
正确的答案是R_Sahu,但是如果您真的想要这种语法并且感觉自我毁灭......
struct _ : public DealSchedule { _() {
site_ = site;
deal_id_ = deal_id;
payment_date_ = payment_date;
ccy1_ = ccy1;
ccy2_ = ccy2;
}} trf_schedule;
这使用内联结构进行初始化,然后您可以切片回DealSchedule
。
(实际上并没有这样做)
答案 1 :(得分:1)
DealSchedule trf_schedule
{
site_ = site;
deal_id_ = deal_id;
payment_date_ = payment_date;
ccy1_ = ccy1;
ccy2_ = ccy2;
};
是无效的初始化对象的C ++语法。您可以使用
初始化对象DealSchedule trf_schedule = {site, deal_id, payment_date, ccy1, ccy2};
如果
public
(在您的情况下听起来是正确的)并且没有提供其他显式或用户定义的构造函数,或