में बहु-आयामी सरणी को स्पष्ट रूप से परिभाषित करें T[][][]
सिंटैक्स का उपयोग करके बहु-आयामी सरणी को परिभाषित करना आसान है। हालांकि, यह एक कच्चे सरणी प्रकार बनाता है जो आधुनिक सी ++ में अच्छी तरह फिट नहीं होता है। यही कारण है कि हमारे पास C12+ 11 के बाद std::array
है। लेकिन std::array
का उपयोग कर बहु-आयामी सरणी को परिभाषित करने के लिए वाक्यविन्यास काफी गन्दा है। उदाहरण के लिए, एक त्रि-आयामी int
सरणी को परिभाषित करने के लिए, आपको std::array<std::array<std::array<int, 5>, 5>, 5>
लिखना होगा। वाक्यविन्यास बिल्कुल स्केल नहीं करता है। मैं इस मुद्दे के लिए एक फिक्स मांग रहा हूँ। शायद, इस समस्या को C++ द्वारा प्रदान की गई मौजूदा उपयोगिता का उपयोग करके ठीक नहीं किया जा सकता है। उस स्थिति में, मैं वाक्यविन्यास को कम करने के लिए विकसित एक कस्टम टूल से खुश हूं।आधुनिक सी ++
मिले एक solution अपने आप:
template <typename T, std::size_t n, std::size_t... ns>
struct multi_array {
using type = std::array<typename multi_array<T, ns...>::type, n>;
};
template <typename T, std::size_t n>
struct multi_array<T, n> {
using type = std::array<T, n>;
};
template <typename T, std::size_t... ns>
using multi_array_t = typename multi_array<T, ns...>::type;
सोच कार्यान्वयन आगे सरल किया जा सकता है या नहीं।
[बूस्ट.मल्टी एरे] (http://www.boost.org/doc/libs/1_60_0/libs/multi_array/doc/user.html#sec_example) बचाव के लिए? –
@AngryLettuce मुझे लगता है कि इस तरह के साधारण मामलों के लिए थोड़ा बहुत भारी होगा। मैं सिर्फ इसके लिए पूरे बूस्ट में नहीं खींचना चाहता हूं। – Lingxi
क्या 'typedef' स्वीकार्य नहीं है:' typedef std :: array>> तीन डी; '..' तीन डी arr; एआर [0] [0] [0] ... '? इस उदाहरण को अलग-अलग प्रकारों की अनुमति देने के लिए संशोधित करना होगा, जाहिर है, लेकिन जिज्ञासा अगर इससे मदद मिल सकती है? –
txtechhelp