খুব বেশি আগে প্রয়োজন-এক্সপ্রেশন (দ্বিতীয়টির দ্বারা প্রযোজিত বাক্যাংশ) সীমাবদ্ধতা-এক্সপ্রেশনগুলিতে অনুমোদিত হয়নি (প্রথমটির সাথে প্রবর্তিত বাক্যাংশ)। এটি কেবল ধারণার সংজ্ঞায় হাজির হতে পারে। প্রকৃতপক্ষে, এই কাগজের বিভাগে যেখানে দাবিটি উপস্থিত হয় ঠিক তেমনই প্রস্তাবিত।
তবে, ২০১ in সালে, এই বিধিনিষেধ শিথিল করার প্রস্তাব ছিল [সম্পাদকের নোট: পি0266 ]। কাগজের ৪ নং অনুচ্ছেদে অনুচ্ছেদ of এর স্ট্রাইকথ্রুটি নোট করুন। এবং এইভাবে জন্মগ্রহণ করা প্রয়োজন প্রয়োজন।
সত্য কথা বলতে, আমি আসলে কখনই জিসিসিতে সেই সীমাবদ্ধতা প্রয়োগ করি নি, তাই এটি সর্বদা সম্ভব ছিল। আমি মনে করি যে ওয়াল্টার এটি আবিষ্কার করেছেন এবং এটি দরকারী বলে খুঁজে পেয়েছেন যা সেই কাগজের দিকে নিয়ে গেছে।
পাছে কেউ যাতে ভাবতে পারে যে আমি লেখার প্রতি সংবেদনশীল ছিলাম না তার জন্য দু'বার প্রয়োজন হয়, এটি সহজ করার জন্য আমি কিছু সময় ব্যয় করেছি। সংক্ষিপ্ত উত্তর: না।
সমস্যাটি হ'ল এখানে দুটি ব্যাকরণগত গঠন রয়েছে যা একটি টেম্পলেট প্যারামিটার তালিকার পরে প্রবর্তন করা দরকার: খুব সাধারণত একটি সীমাবদ্ধ অভিব্যক্তি (যেমন P && Q
) এবং মাঝে মাঝে সিনট্যাকটিক প্রয়োজনীয়তা (পছন্দ requires (T a) { ... }
)। এটিকে একটি প্রয়োজন-অভিব্যক্তি বলা হয়।
প্রথমটি সীমাবদ্ধতার পরিচয় দেয় requires দ্বিতীয়টি প্রয়োজনীয়-প্রকাশের পরিচয় দেয় requires ব্যাকরণ রচনা ঠিক এইভাবে। আমি এটিকে মোটেই বিভ্রান্তিকর মনে করি না।
আমি চেষ্টা করেছি, এক পর্যায়ে এগুলিকে একক প্রয়োজনে ভেঙে দেওয়ার জন্য। দুর্ভাগ্যক্রমে, এটি কিছু গুরুতর কঠিন পার্সিং সমস্যার দিকে নিয়ে যায়। আপনি সহজেই বলতে পারবেন না, উদাহরণস্বরূপ যদি (
প্রয়োজনের পরে কোনও নেস্টেড সুবেশন এক্সপ্রেশন বা প্যারামিটার-তালিকা বোঝায়। আমি বিশ্বাস করি না যে এই সিনট্যাক্সগুলির একটি নিখুঁত ছদ্মবেশ রয়েছে (অভিন্ন সূচনা সিনট্যাক্সের যুক্তি দেখুন; এই সমস্যাটিও আছে)।
সুতরাং আপনি একটি চয়ন করুন: মেক একটি এক্সপ্রেশন পরিচয় প্রয়োজন (এটি এখন যেমন হয়) বা এটি প্রয়োজনীয়তার একটি প্যারামিটারাইজড তালিকা প্রবর্তন করে।
আমি বর্তমান পদ্ধতিটি বেছে নিয়েছি কারণ বেশিরভাগ সময় (প্রায় 100% সময় হিসাবে), আমি প্রয়োজন-প্রকাশের বাইরে অন্য কিছু চাই। এবং অত্যধিক বিরল ক্ষেত্রে আমি অ্যাড-হকের সীমাবদ্ধতার জন্য প্রয়োজন-প্রকাশ করতে চাই, আমি সত্যিই দু'বার এই শব্দটি লিখতে আপত্তি করি না। এটি একটি সুস্পষ্ট সূচক যে আমি টেমপ্লেটের জন্য পর্যাপ্ত শব্দ বিমূর্ততা তৈরি করি নি। (কারণ আমার থাকলে এটির একটি নাম থাকত))
আমি প্রয়োজনীয়গুলি একটি প্রয়োজনীয়-এক্সপ্রেশন পরিচয় করিয়ে দিতে পছন্দ করতে পারি। এটি আসলে আরও খারাপ, কারণ কার্যত আপনার সমস্ত বাধা এইরকম দেখতে শুরু করবে:
template<typename T>
requires { requires Eq<T>; }
void f(T a, T b);
এখানে, ২ য় প্রয়োজনীয়কে নেস্টেড-প্রয়োজনীয়তা বলা হয়; এটি এর অভিব্যক্তিটি মূল্যায়ন করে (প্রয়োজনীয়-এক্সপ্রেশনটির ব্লকের অন্যান্য কোড মূল্যায়ন হয় না)। আমি মনে করি এটি স্থিতাবস্থার চেয়েও খারাপ। এখন, আপনার লেখার জন্য সর্বত্র দুবার প্রয়োজন।
আমি আরও কীওয়ার্ড ব্যবহার করতে পারে। এটি নিজেই একটি সমস্যা --- এবং এটি কেবল বাইক চালানো নয়। সদৃশতা এড়ানোর জন্য কীওয়ার্ডগুলিকে "পুনরায় বিতরণ" করার উপায় থাকতে পারে তবে আমি সেই গুরুতর চিন্তাভাবনা করি নি। তবে এটি সমস্যার মূলত পরিবর্তন করে না।
noexcept(noexcept(...))
।