2015-12-25 13 views
10

मैं की तरहएक निर्दिष्ट आकार के साथ std :: सरणी टाइप कैसे करें?

std::array<double, array_num> a; 

कुछ चर लिखने के लिए जहां array_num एक const int सरणी की लंबाई का प्रतिनिधित्व करता है चाहता हूँ। लेकिन यह लंबा है और मैं इसके लिए उपनाम बनाना चाहता हूं:

typedef std::array<double, array_num> my_array; 

क्या यह सही है? मैं my_array जैसे my_array<3> का उपयोग कैसे कर सकता हूं?

+0

ए 'std :: array' में * स्थिर * आयाम अभिव्यक्ति है। यह एक चर नहीं हो सकता है। यदि आप इसे एक चर होना चाहते हैं, तो आप 'std :: vector' या शायद कुछ भविष्य' std :: dynarray' (C++ के लिए कुछ भविष्य के मानक में) –

उत्तर

27

आप क्या जरूरत है एक alias template है:

template <size_t S> 
using my_array = std::array<double, S>; 

आप सीधे एक typedef टेम्पलेट नहीं कर सकते, this post देखते हैं।

size_t दूसरा टेम्पलेट पैरामीटर std::array के प्रकार, लेता नहीं int है।

अब आप using के बारे में जानते हैं, तो आपको इसका उपयोग करना चाहिए। यह सब कुछ कर सकता है जो typedef करता है, साथ ही यह भी करता है। इसके अलावा, आप इसे के साथ typedef के विपरीत, = साइन के साथ बाएं से दाएं से पढ़ते हैं, जो कभी-कभी आपकी आंखों को चोट पहुंचा सकता है।

template <typename T> 
using dozen = std::array<T, 12>; 

और अगर आप std::array के लिए एक उपनाम बनाने के लिए, यह है जैसे चाहते हैं तो आप अपने टेम्पलेट हस्ताक्षर की नकल करने की आवश्यकता होगी:


मुझे उपयोग की दो और उदाहरण जोड़ें:

template <typename T, size_t S> 
using my_array = std::array<T, S>; 

- इस वजह से अनुमति नहीं है:

using my_array = std::array; 
+2

बहुत बहुत धन्यवाद चाहते हैं! 'उपयोग' वास्तव में बेहतर है, और इसलिए 'size_t' है। – yikouniao

+0

'size_t' दूसरे' std :: array' टेम्पलेट पैरामीटर का प्रकार है, और इसका उपयोग सभी मानक कंटेनरों के आकार के लिए किया जाता है। X86-64 पर, 'int' में 4 बी है, जबकि' size_t' में 8 बी है। आप बस वहां 'int' गड़बड़ नहीं करना चाहते हैं। यह 'हस्ताक्षरित' भी नहीं है। – LogicStuff

+0

@yikouniao कुछ अतिरिक्त जानकारी जोड़ा गया है, और साथ ही, टेम्पलेट तर्क एक चर नहीं हो सकता है, जैसा कि आपने इसे अपने प्रश्न में phrased किया है। – LogicStuff

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