c++ - How to pass a row of boost::multi_array and std::vector by reference to the same template function? -


मुझे इस बिट कोड के साथ एक समस्या है:

  #include & lt; boost / multi_array.hpp & gt; # शामिल करें & lt; boost / array.hpp & gt; # शामिल करें & lt; vector & gt; # शामिल करें & lt; iostream & gt; टेम्पलेट & lt; typename Vec & gt; शून्य foo (वीएसी और एक्स, आकार_टी एन) {के लिए (आकार_टी i = 0; i & lt; N; ++ i) {x [i] = i; }} Int main () {std :: vector & lt; डबल & gt; v1 (10); फू (वी 1, 5); Std :: cout & lt; & lt; V1 [4] & lt; & lt; std :: endl; बढ़ावा :: बहु_अरे & lt; डबल, 2 & gt; एम 1; बढ़ावा :: सरणी & lt; डबल, 2 & gt; आकार; आकार [0] = 10; आकार [1] = 10; m1.resize (आकार); फू (एम 1 [0], 5); Std :: cout & lt; & lt; एम 1 [0] [4] & lt; & lt; std :: endl; वापसी 0; }  

जीसीसी के साथ इसे संकलित करने की कोशिश में, मुझे त्रुटि मिलती है:

  boost_multi_array.cpp: फ़ंक्शन में 'int main ()': boost_multi_array.cpp : 26: त्रुटि: प्रकार 'बढ़ावा :: विवरण :: मल्टी_अरे :: उप-ऐरे & lt; डबल, 1यू & gt; के गैर-कॉन्स्ट्रेंट संदर्भ के अवैध प्रारंभ एक अस्थायी प्रकार से 'बढ़ावा :: विस्तार :: बहुआकार :: उप_अरे & lt; डबल, 1यू & gt; Boost_multi_array.cpp: 7: त्रुटि: 'void foo (वीएसी & amp ;, size_t) के [तर्क के साथ = Vec = boost :: detail :: multi_array :: sub_array & lt; double, 1u & gt;]'   

इसे बढ़ावा देने के लिए अपेक्षित काम करता है: multi_array जब मैं फ़ंक्शन foo से Vec & से Vec , लेकिन तब std :: vector मूल्य से पारित किया जाता है, जो कि मैं क्या चाहता हूं। दो टेम्पलेट लिखे बिना अपना लक्ष्य कैसे प्राप्त कर सकता हूं?

समस्या यह है कि NumDims> 1 , ऑपरेटर [] एक अस्थायी ऑब्जेक्ट प्रकार टेम्पलेट subarray देता है।

A (नहीं बहुत अच्छा) काम के आसपास निम्नलिखित की तरह कुछ होगा:

  typedef बढ़ावा :: बहु_अरे & lt; डबल, 2 & gt; एमए, एमए एम 1; एमए :: संदर्भ रेफरी = एम 1 [0]; फू (रेफरी, 5); // रेफरी अब कोई अस्थायी नहीं है  

एक विकल्प आपके कार्यान्वयन को लपेटेगा और बहु-सरणी केस के लिए अधिभार प्रदान करेगा .... उदाहरण:

< Em> (ध्यान दें: मुझे यह नहीं पता था कि boost :: mult_array & lt; t, n & gt; :: संदर्भ के साथ काम करने के लिए अधिभार कैसे प्राप्त करें, कृपया इस के साथ उत्पादक उपयोग में मत डालें < कोड> विवरण :: संस्करण;)

  टेम्पलेट & lt; class T & gt; शून्य foo_impl (टी एक्स, आकार_टी एन) {for (size_t i = 0; i & lt; N; ++ i) {x [i] = i; }} टेम्पलेट & lt; कक्षा T & gt; शून्य एफयू (टी एंड amp; टी, आकार_टी एन) {foo_impl & lt; टी & amp; & gt; (टी, एन); } टेम्पलेट & lt; typename टी, size_t आकार & gt; शून्य foo (बढ़ावा :: विवरण :: बहुआकार :: उप-सारण & lt; T, आकार & gt; आर, आकार_टी एन) {foo_impl (r, n); }  

Comments

Popular posts from this blog

oracle - The fastest way to check if some records in a database table? -

php - multilevel menu with multilevel array -

jQuery UI: Datepicker month format -