রেঞ্জ লাইব্রেরিতে দুটি ধরণের অপারেশন রয়েছে:
- যা অলস এবং অন্তর্নিহিত ধারকটির অস্তিত্ব দরকার তা দেখায় ।
- ক্রিয়া যা উত্সাহী, এবং ফলস্বরূপ নতুন পাত্রে উত্পাদন করে (বা বিদ্যমানগুলি সংশোধন করুন)
দর্শনগুলি হালকা ওজনের। আপনি এগুলি মান দ্বারা পাস করেন এবং অন্তর্নিহিত পাত্রে বৈধ এবং অপরিবর্তিত থাকা প্রয়োজন।
থেকে রেঞ্জ-V3 ডকুমেন্টেশন
একটি ভিউ হ'ল লাইটওয়েটের মোড়ক যা কোনও পরিবর্তন বা অনুলিপি ছাড়াই কিছু কাস্টম পদ্ধতিতে উপাদানগুলির অন্তর্নিহিত ক্রমের একটি দৃশ্য উপস্থাপন করে। ভিউগুলি তৈরি এবং অনুলিপি করার পক্ষে সস্তা এবং অ-মালিকানা সংক্রান্ত রেফারেন্স শব্দার্থক শব্দ রয়েছে।
এবং:
অন্তর্নিহিত রেঞ্জের যে কোনও ক্রিয়াকলাপ যা তার পুনরাবৃত্তকারী বা প্রেরণকারীকে অবৈধ করে দেয় সেই ব্যাপ্তিকে যে সীমার কোনও অংশ উল্লেখ করে তা অবৈধ করে দেবে।
অন্তর্নিহিত ধারকটির ধ্বংসটি অবশ্যই এটিতে সমস্ত পুনরাবৃত্তিকারীকে অবৈধ করে দেয়।
আপনার কোডে আপনি স্পষ্টত দর্শন ব্যবহার করছেন - আপনি ব্যবহার করেন ranges::views::transform
। পাইপটি কেবল একটি সিনট্যাকটিক চিনি যা এটির মতো লেখাকে সহজ করে তোলে। আপনি কী উত্পাদন করেন তা দেখতে পাইপের শেষ জিনিসটি দেখতে হবে - আপনার ক্ষেত্রে এটি একটি দৃশ্য।
যদি কোনও পাইপ অপারেটর না থাকে তবে সম্ভবত এটির মতো দেখতে লাগবে:
ranges::views::transform(my_custom_rng_gen(some_param), my_transform_op)
যদি সেখানে একাধিক রূপান্তর সংযুক্ত থাকে তবে আপনি দেখতে পাচ্ছেন যে এটি কতটা কুৎসিত হবে।
সুতরাং, যদি my_custom_rng_gen
কোনও ধারক উত্পাদন করে, যা আপনি রূপান্তর করেন এবং তারপরে ফিরে আসেন, সেই ধারকটি ধ্বংস হয়ে যায় এবং আপনার দৃষ্টিভঙ্গি থেকে আপনার ঝুঁকির উল্লেখ রয়েছে। যদি my_custom_rng_gen
এই স্কোপের বাইরে থাকা কোনও ধারকের কাছে অন্য মতামত হয় তবে সবকিছু ঠিক আছে।
যাইহোক, সংকলকটি সনাক্ত করতে সক্ষম হবে যে আপনি একটি অস্থায়ী ধারকটিতে একটি ভিউ প্রয়োগ করছেন এবং আপনাকে একটি সংকলন ত্রুটির সাথে আঘাত করবে।
যদি আপনি চান যে আপনার ফাংশনটি কোনও ধারক হিসাবে কোনও পরিসীমা ফেরত আসতে পারে, তবে আপনাকে ফলাফলটি স্পষ্টতই "বাস্তবায়ন" করতে হবে। তার জন্য, ranges::to
ফাংশনের মধ্যে অপারেটরটি ব্যবহার করুন ।
আপডেট: আপনার মন্তব্যের বিষয়ে আরও স্পষ্ট হয়ে উঠতে "ডকুমেন্টেশনটি কোথায় বলে যে র্যাংক / পাইপিং রঞ্জকটি কোনও ভিউ নেয় এবং সঞ্চয় করে?"
পাইপ হ'ল সহজেই পঠনযোগ্য সহজে প্রকাশের সাথে জিনিসগুলিকে সংযুক্ত করার জন্য একটি সিনট্যাকটিক চিনি। এটি কীভাবে ব্যবহৃত হবে তার উপর নির্ভর করে এটি কোনও দর্শন ফিরে আসতে পারে এবং নাও পারে। এটি ডান হাতের যুক্তির উপর নির্ভর করে। আপনার ক্ষেত্রে এটি হয়:
`<some range> | ranges::views::transform(...)`
সুতরাং এক্সপ্রেশনটি যা কিছু views::transform
ফেরত দেয়।
এখন, রূপান্তরটির ডকুমেন্টেশন পড়ে:
নীচে রেঞ্জ-ভি 3 সরবরাহ করে এমন অলস পরিসীমা সংযোজকগুলির বা ভিউগুলির একটি তালিকা এবং প্রতিটি কীভাবে ব্যবহার করার উদ্দেশ্যে রয়েছে সে সম্পর্কে একটি ব্লার্ব রয়েছে।
[...]
views::transform
একটি উত্স পরিসীমা এবং একটি unary ফাংশন দেওয়া, একটি নতুন পরিসীমা ফিরে যেখানে প্রতিটি ফলাফল উপাদান একটি উত্স উপাদান এ unary ফাংশন প্রয়োগ ফলাফল।
সুতরাং এটি একটি সীমার ফিরিয়ে দেওয়া উচিত তবে যেহেতু এটি একটি অলস অপারেটর, যে সীমার এটা ফেরৎ হয় একটি দৃশ্য, তার সব শব্দার্থবিদ্যা সঙ্গে।