2017-06-02 94 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,謝謝加入精化 –