এটি কোন সমস্যার সমাধান করে,
দেখুন Dietmar এর উত্তর এবং remyabel এর উত্তর ।
এবং এটি কীভাবে স্ট্যান্ডার্ড পাত্রে কাজ করে তা পরিবর্তন করে?
না, ডিফল্টরূপে নয়।
এর নতুন সদস্য ফাংশন টেম্পলেট ওভারলোডগুলি find
আপনাকে কী টাইপটি ব্যবহার না করে পাত্রে কী এর সাথে তুলনীয় এমন একটি প্রকারের ব্যবহার করতে দেয়। যৌক্তিকতা এবং এই বৈশিষ্ট্যটি যুক্ত করার জন্য একটি বিশদ, সাবধানে লিখিত প্রস্তাবের জন্য জোয়াকান মো লেপেজ মুউজের N3465 দেখুন ।
ব্রিস্টল বৈঠকে এলডাব্লুজি সম্মতি জানায় যে বৈচিত্র্যপূর্ণ অনুসন্ধানের বৈশিষ্ট্যটি দরকারী এবং আকাঙ্ক্ষিত, তবে আমরা নিশ্চিত হতে পারি না যে জ্যাকউনের প্রস্তাবটি সব ক্ষেত্রেই নিরাপদ থাকবে। N3465 প্রস্তাব কিছু প্রোগ্রামের জন্য গুরুতর সমস্যা সৃষ্টি করতে পারে ( বিদ্যমান কোড বিভাগে প্রভাব দেখুন )। জোয়াকন বিভিন্ন ট্রেড-অফগুলির সাথে কিছু বিকল্প বাস্তবায়ন সহ একটি আপডেট করা খসড়া প্রস্তাব প্রস্তুত করেছিলেন, যা এলডাব্লুজিকে বিভিন্ন উপকারিতা বোঝার জন্য খুব দরকারী ছিল, তবে তারা সকলেই কিছু উপায়ে কিছুটা ভেঙে ফেলার ঝুঁকি নিয়েছিল যাতে বৈশিষ্ট্যটি যুক্ত করার পক্ষে কোনও sensক্যমত্য হয়নি। আমরা স্থির করেছি যে শর্তহীন বৈশিষ্ট্যটি যুক্ত করা নিরাপদ না হলেও এটি ডিফল্টরূপে অক্ষম থাকলে এবং কেবলমাত্র "অপ্ট ইন" করা নিরাপদ হবে।
N3657 প্রস্তাবের মূল পার্থক্যটি (যা N3465 এর উপর ভিত্তি করে আমার এবং এসটিএল দ্বারা শেষ মুহূর্তে সংশোধন করা হয়েছিল এবং জোয়াকুনের পরে অপ্রকাশিত খসড়া) is_transparent
প্রোটোকল হিসাবে প্রকারটি যুক্ত করা হয়েছিল যা নতুন কার্যকারিতাটি বেছে নিতে ব্যবহার করতে পারে।
আপনি যদি "স্বচ্ছ ফান্টেক্টর" ব্যবহার করেন না (যেমন একটি is_transparent
প্রকার সংজ্ঞায়িত করে ) তবে পাত্রে তারা সর্বদা যেমন করে তেমন আচরণ করে এবং এটি এখনও ডিফল্ট।
যদি আপনি ব্যবহার করতে চান std::less<>
(যা সি ++ 14 এর জন্য নতুন) বা অন্য কোনও "স্বচ্ছ ফান্টেক্টর" টাইপ করুন তবে আপনি নতুন কার্যকারিতা পাবেন।
std::less<>
ওরফে টেমপ্লেটগুলির সাহায্যে ব্যবহার করা সহজ:
template<typename T, typename Cmp = std::less<>, typename Alloc = std::allocator<T>>
using set = std::set<T, Cmp, Alloc>;
নামটি is_transparent
এসটিএল এর N3421 থেকে এসেছে যা "হীরা অপারেটর" কে সি ++ 14 এ যুক্ত করেছে। একটি "স্বচ্ছ ফান্টেক্টর" হ'ল যা কোনও আর্গুমেন্টের ধরণগুলি গ্রহণ করে (যা একই রকম হতে হবে না) এবং সেই যুক্তিগুলি কেবল অন্য অপারেটরে প্রেরণ করে। এই জাতীয় ফান্টরটি is_transparent
হ'ল সংঘবদ্ধ পাত্রে ভিন্নজাতীয় অনুসন্ধানের জন্য যা চান, তাই হ'ল তাই এই টাইপটি সমস্ত হীরা অপারেটরগুলিতে যুক্ত করা হয়েছিল এবং নতুন ফাংশনটিটিটি এসোসিয়েটিভ পাত্রে সক্ষম করা উচিত তা নির্দেশ করার জন্য ট্যাগ টাইপ হিসাবে ব্যবহৃত হয়েছিল। প্রযুক্তিগতভাবে, ধারকগুলিকে "স্বচ্ছ ফান্টর" লাগবে না, কেবলমাত্র এটি একে ভিন্নধর্মী প্রকারের সাহায্যে কল করতে সমর্থন করে (যেমন https://stackoverflow.com/a/18940595/981959-তেpointer_comp
টাইপটি এসটিএল এর সংজ্ঞা অনুসারে স্বচ্ছ নয়,pointer_comp::is_transparent
এটি সমস্যার সমাধান করতে ব্যবহার করার অনুমতি দেয়)। আপনি যদি কেবলমাত্র std::set<T, C>
কীগুলির সাথে কী অনুসন্ধান করেন T
বা int
তারপরে C
কেবলমাত্র ধরণের যুক্তি T
এবং int
(উভয় ক্রমে) কল করার প্রয়োজন হয় তবে এটি সত্যিকারের স্বচ্ছ হওয়ার দরকার নেই। আমরা সেই নামটি আংশিকভাবে ব্যবহার করেছি কারণ আমরা আরও ভাল নামটি নিয়ে আসতে পারিনি (আমি পছন্দ করতাম is_polymorphic
কারণ এই জাতীয় ফ্যান্ট্যাক্টরা স্ট্যাটিক পলিমারফিজম ব্যবহার করে তবে ইতিমধ্যে একটি std::is_polymorphic
ধরণের বৈশিষ্ট্য রয়েছে যা গতিশীল পলিমারফিজমকে বোঝায়)।