2013-06-28 5 views
14

सी ++ में, प्रारंभिक सूची में अस्थायी चर की तरह कुछ करने का कोई तरीका है। मैं दो निरंतर सदस्यों को उसी चीज के साथ शुरू करना चाहता हूं, जिसमें कुछ ऐसा करने के बिना, कॉन्स आवश्यकता को हटा दें, फैक्ट्री का उपयोग करें (यानी इसे पास करें लेकिन फैक्ट्री को इसे एपीआई उपयोगकर्ता से छिपाने के लिए उत्पन्न करें), या अस्थायी वास्तव में एक सदस्य चर हो।सी ++ अस्थायी चर

आईई। जैसे

Class Baz{ 
    const Foo f; 
    const Bar b; 
    Baz(Paramaters p):temp(p),f(p,temp),b(p,temp){ //temp is an instance of Something 
                // But NOT A member of Baz 
    // Whatever 
    } 
} 
बजाय

Class Baz{ 
    Foo f; 
    Bar b; 
    Baz(Paramaters p){ 
     Something temp(p); 
     f = Foo(p,temp) 
     b = Bar(p,temp) 
    } 
} 

या

Class Baz{ 
    Foo f; 
    Bar b; 
    Baz(Paramaters p,Something s):f(p,s),b(p,s){ 
    } 
} 

उत्तर

18

कुछ सी ++ 11 में आप कंस्ट्रक्टर्स सौंपने के इस्तेमाल कर सकते हैं:

class Baz{ 
    const Foo f; 
    const Bar b; 
    Baz(Paramaters p) : Baz(p, temp(p)) { } // Delegates to a private constructor 
              // that also accepts a Something 
private: 
    Baz(Paramaters p, Something const& temp): f(p,temp), b(p,temp) { 
     // Whatever 
    } 
}; 
+0

अच्छा लगा। दुर्भाग्यवश, मुझे नहीं लगता कि मैं इसे सी ++ 11 पर निर्भर करना चाहता हूं बस इस समस्या से बचें। इसकी एक लाइब्रेरी है और मुझे लगता है कि कुछ लोग इसे एकीकृत करने के लिए ऑब्जेक्ट कर सकते हैं अगर उन्हें सी ++ 11 – imichaelmiers

+0

@imichaelmiers का उपयोग शुरू करना पड़ा: मैं देखता हूं। क्या आपके पास 'कुछ', 'फू' और 'बाज' की परिभाषा पर नियंत्रण है? उदाहरण के लिए, क्या आप 'फू' में एक सदस्य फ़ंक्शन जोड़ सकते हैं जो 'कुछ' ऑब्जेक्ट को इसके साथ बनाया गया था? (ताकि आप इसे 'बी' के प्रारंभ में 'बी (पी, f.get_something()) के रूप में उपयोग कर सकें। –

संबंधित मुद्दे