স্ট্যান্ডার্ড :: অ্যারে <টি, এন> এর উদাহরণ তৈরি না করে কীভাবে উপাদানগুলির সংখ্যা পাবেন?


9

আছে std::array<T, N>::size(), তবে এটি অচল, সুতরাং এটির একটি উদাহরণ প্রয়োজন std::array। অ্যারের কোনও উদাহরণ তৈরি না করে মানটি ফেরত পাওয়ার কোনও উপায় আছে (যা Nএর std::array<T, N>)? একটি সাধারণ অ্যারে জন্য, আমি ব্যবহার করতে পারে sizeof, কিন্তু আমি sizeof(std::array<T, N>) == N * sizeof(T)সত্য যে কোন গ্যারান্টি দেখতে ।


যদি আপনার কাছে থাকে তবে আপনার Nকেন arrayএটি পুনরুত্পাদন করতে বলা উচিত?
শ্যাডোএ্যাঞ্জার 18

@ ShadowRanger কারণ sizeof(std::array<T, N>) == N * sizeof(T)সত্য হতে হবে না।
নাথান অলিভার

কারণ অ্যারে অন্য কোথাও টাইপডাইফড হতে পারে বা কোনও টেমপ্লেটের আর্গুমেন্ট হিসাবে পাস করা যেতে পারে।
ড্রাগনেট

1
আপনি যদি উপাদানগুলির সংখ্যা জানতে চান তবে কেবল ব্যবহার করুন N
জনফিলাউ

1
@ ডিগ্রোনরুট এই সমস্ত কিসের অর্থ, যদিও? আপনার যদি ইতিমধ্যে Nশুরু করতে হয়, Nঅপ্রত্যক্ষভাবে পেতে বা এটি যাচাই করার জন্য এই সমস্ত কিছু দিয়ে যাওয়ার দরকার নেই N==N। আপনি যে সমাধানের চেষ্টা করছেন তা আসল ব্যবহারের কেস ?
রেমি Lebeau

উত্তর:


14

আছে std::tuple_size<std::array>

static_assert(std::tuple_size<std::array<int, 5>>::value == 5);


2
@ জেসপারজুহল আসলে না, std::size()অ্যারের উদাহরণ প্রয়োজন।
0x499602D2

1
tuple_sizeযদিও এটি ইতিমধ্যে টেম্পলেটে পাস করার জন্য যদি আপনি ইতিমধ্যে অ্যারের আকারটি সামনে জানেন তবে এটি এর মতো ব্যবহার করার কোনও অর্থ নেই । এটি আরও অর্থবহ উদাহরণ হতে পারে? using ArrayType = std::array<int, 5>; ... static_assert(std::tuple_size<ArrayType>::value == 5);
রেমি Lebeau

@ রেমিলিউউ আমি অনুমান করি যে ও / পি ভাবছেন অ্যারে ডেসেলটি কোনও টেম্পলেট ফাংশনটিতে টেম্পলেট যুক্তি হিসাবে পাস হয়েছে? তারপরেও আমি দেখতে পাচ্ছি একমাত্র উদ্দেশ্য হ'ল এটি প্রত্যাবর্তিত অবজেক্ট হিসাবে নির্ধারণ করা, যার জন্য এখনও একটি উদাহরণ তৈরি করা দরকার।
রত্ন টেলর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.