2016-01-02 10 views
13

के साथ एक सरणी populating जब सिंटेक्स मुद्दा हाँ, मैं std::initializer_list का उपयोग कर सकते हैं। हां, और भी आसान, मैं कुल प्रारंभिक कर सकता हूं। लेकिन यह कैसे काम करता है? मैं सी ++ 17 के गुना अभिव्यक्तियों के आस-पास अपने सिर को फोल्ड नहीं कर सकता। वहां पर्याप्त उदाहरण नहीं हैं।एक गुना अभिव्यक्ति

यहाँ मैं के साथ आया है:

template<class T, std::size_t N> 
struct foo 
{ 
    T arr[N]; 

    template<typename... Args> 
    constexpr foo(Args&&... pack) 
    { 
     static_assert(sizeof...(pack) <= N, "Too many args"); 
     std::size_t i = 0; 
     (arr[i++] = ...); 
    } 
}; 

int main() 
{ 
    foo<int, 5> a(1, 2, 3, 4, 5); 
} 

संपादित करें: नवीनतम बजना के साथ संकलन। मोड़ अभिव्यक्ति समर्थित हैं।

लाइव उदाहरण:http://coliru.stacked-crooked.com/a/777dc32da6c54892

+1

कम से कम नहीं होना चाहिए '(arr [i ++] = pack ...) '? –

+0

@VaughnCato अभिव्यक्ति में अनपेक्षित पैरामीटर पैक 'पैक' है - इसलिए क्लैंग शिकायत करता है। – DeiDei

+0

वॉन ने कहा: "त्रुटि: पैक विस्तार में कोई अप्रत्याशित पैरामीटर पैक नहीं है" – Deduplicator

उत्तर

13

आप अल्पविराम ऑपरेटर है, जो भी अनुक्रमण समस्या हल के साथ गुना करने की जरूरत है।

(...,void(arr[i++] = pack)) 

void लिए डाली सुनिश्चित करें कि निर्मित अल्पविराम ऑपरेटर प्रयोग किया जाता है बनाने के लिए है:

(void(arr[i++] = pack) , ...); 
+2

हाँ, पूरी तरह से काम करता है। इससे पहले कि यह वाक्यविन्यास मुझे भ्रमित न हो जाए, इसमें कुछ समय लगेगा। जब कोई और इसे लिखता है तो यह पूरी तरह से तार्किक लग रहा है। : डी – DeiDei

+0

और कोलिरु पर http://coliru.stacked-crooked.com/a/f59078c078d25340 – Deduplicator

+1

@ जारोड 42 नोप, ', 'अनुक्रम अनुक्रमित करता है। –

4

के बाद से अल्पविराम ऑपरेटर बाएं साहचर्य है, तो आप आदर्श रूप से एक को छोड़ दिया एकल गुना का प्रयोग करेंगे। इस मामले में, सौहार्द वास्तव में कोई फर्क नहीं पड़ता।

+2

कोई फर्क नहीं पड़ता। दोनों '((ए, बी), सी) 'और' (ए, (बी, सी)) '' '' '' '' '' '' '' 'का मूल्यांकन करते हैं। –

+1

@ टी.सी. .: एक (शून्य) कास्ट के साथ, यह सच है, लेकिन उचित सौहार्द का उपयोग करने की आदत में सबसे अच्छा लगता है। –

+0

@ टी.सी. .: और हाँ, फ़ंक्शन-स्टाइल कास्ट अच्छा है। –

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