मैं कुशलता से एक std :: सरणी के तत्वों के साथ एक पैरामीटर पैक से तर्क गुणा करने के लिए चाहते हैं के साथ पैरामीटर पैक तर्क गुणा इस के चारों ओर मेरे दिमाग को काफी लपेटो। मैंने इंडेक्स अनुक्रम की सड़क शुरू कर दी, लेकिन मैं समझ सकता हूं कि संक्षेप में कैसे शामिल किया जाए।C++ 17 कुशलता से std :: सरणी तत्वों
मैं सी ++ 17 का उपयोग कर रहा हूं, इसलिए अगर वे कोड को सरल बनाते हैं तो गुना अभिव्यक्ति उचित गेम होती है।
किसी भी पॉइंटर्स के लिए धन्यवाद।
संपादित करें: छद्म कोड को स्पष्ट करें। एकमात्र छद्म भाग अभिव्यक्ति Is[i]
है जो i'th पैरामीटर पैक तर्क को संदर्भित करता है।
टीसी के नीचे इस सवाल का जवाब सही था और यहाँ मेरा अंतिम कोड एक सदस्य समारोह है जो है:
unsigned int index(auto... indexes)
{
unsigned int idx = 0, i = 0;
(..., (idx += indexes * m_strides[i++]));
return idx;
}
इस लेखन के रूप में, कोड -fconcepts ध्वज के साथ जीसीसी 6.3.0 का उपयोग कर संकलित है, जो अवधारणा टीएस में लाता है।
auto... indexes
का उपयोग template<typename Args> f(Args... indexes)
के लिए लघुरूप है। मैंने तर्कों के लिए एक हस्ताक्षरित int अवधारणा का उपयोग करने की कोशिश की, लेकिन मैं इसे काम नहीं कर सका।
(...,) गुना प्रमुख तत्व है और की तरह कुछ करने के लिए फैलता है (यदि आप कर सकते थे वास्तव में [] पैरामीटर पैक में):
idx += indexes[0] * m_strides[i++], idx += indexes[1] * m_strides[i++], etc.
अंतर्दृष्टि मैं याद आ रही थी था।
मैं उत्सुक क्या संकलक आप उपयोग कर रहे हूँ। – ThomasMcLeod
@ थॉमसएमसीएलओड जीसीसी 6.3.0 - इसमें फोल्ड एक्सप्रेशन और कुछ अन्य सी ++ 17 फीचर्स हैं। – RandomBits
@ थॉमस एमसीएलओड जीसीसी 7 सी ++ 17 पूर्ण है (libstdC++ हालांकि नहीं) –