2017-06-02 95 views
2

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

你只有5个成员来初始化,为什么不使它成为构造函数的一部分?所以你可以称它为'trf_schedule = {site,deal_id,payment_date,ccy1,ccy2};' – Fireboyd78

+0

试图避免随着成员列表的增长更新构造函数。我明白了,@ Fireboyd78 – athos

+0

啊。不幸的是,没有一种方法可以像C++那样使用它,最好的办法是使用构造函数重载。 – Fireboyd78

回答

2

正确答案是R_Sahu的,但在事件你真正想要的是语法和感觉自我毁灭...

struct _ : public DealSchedule { _() { 
    site_ = site; 
    deal_id_ = deal_id; 
    payment_date_ = payment_date; 
    ccy1_ = ccy1; 
    ccy2_ = ccy2; 
}} trf_schedule; 

此使用嵌入式结构进行初始化,您可以再切片回到DealSchedule

(实际上不这样做)

+0

ahahah这是好的,如果继承是可以避免的... – athos

+0

*破坏性*很高兴看到一些轻松的内容:) –

+0

看到我的更新在问题:) – athos

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. 有一个构造函数接受这些参数。
+1

1. [...]并没有提供其他显式或用户定义的构造函数 –

+0

@PasserBy,谢谢加入精化 –