有没有办法初始化大括号的成员?

时间:2017-06-02 02:59:17

标签: c++ initialization

我有一个类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;
}();

2 个答案:

答案 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};

如果

  1. 相应的成员是public(在您的情况下听起来是正确的)并且没有提供其他显式或用户定义的构造函数,或
  2. 有一个构造函数接受这些参数。