2017-06-02 23 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)で出てくることができます。

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、洗練を加えてくれてありがとう –

関連する問題