আমি আমার সি ++ প্রোগ্রামগুলিতে সামনের দিকে এবং সামনের দিকের সামঞ্জস্যের স্তর রাখার জন্য ভালভাবে কাজ করে যাচ্ছি, অবশেষে যখনই আমি এটির বাইরে একটি লাইব্রেরির সরঞ্জামকিট তৈরি না করেছিলাম , যা আমি মুক্তির জন্য প্রস্তুত করছি ইতিমধ্যে প্রকাশিত হয়েছে। সাধারণভাবে, আপনি যতক্ষণ স্বীকার করেন যে আপনি "নিখুঁত" ফরোয়ার্ড-সামঞ্জস্যতা পাবেন না কোনও বৈশিষ্ট্যগুলিতে (কিছু জিনিস কেবল এগিয়ে-অনুকরণ করা যায় না) সিনট্যাক্সে নয় (আপনাকে সম্ভবত ম্যাক্রো, বিকল্প নেমস্পেস ব্যবহার করতে হবে) কিছু জিনিস) তারপরে আপনি সম্পূর্ণ প্রস্তুত।
ব্যবহারিক ব্যবহারের জন্য পর্যাপ্ত পর্যায়ে সি ++ 03 তে অনুকরণ করা যায় এমন অনেকগুলি বৈশিষ্ট্য রয়েছে - এবং উদাহরণস্বরূপ আসা সমস্ত ঝামেলা ছাড়াই: বুস্ট। মুরগি, এমনকি সি ++ মানের প্রস্তাবনাতে nullptr
একটি সি ++ 03 ব্যাকপোর্টের পরামর্শ দেওয়া হয়। এবং তারপরে টিআর 1 রয়েছে প্রতিটি সি ++ 11 এর জন্য উদাহরণস্বরূপ ‑ তবে আমাদের কাছে ‑ বছরের স্টাফের জন্য ‑ পূর্বরূপ। ছিল। শুধু তাই নয়, কিছু সি ++ 14 বৈশিষ্ট্য যেমন আসর্ট ভেরিয়েন্টস, স্বচ্ছ ফান্টেক্টর এবং সি ++ 03 তে প্রয়োগ করা optional
যেতে পারে!
কেবলমাত্র দুটি জিনিস যা আমি জানি যে একেবারে ব্যাকপোর্ট করা যায় না সেগুলি হ'ল কনটেক্সটপ্রপ এবং ভেরিয়াদিক টেম্পলেট।
নেমস্পেসে স্টাফ যুক্ত করার পুরো বিষয়টি সম্পর্কে std
, আমার এ সম্পর্কে আমার দৃষ্টিভঙ্গি হ'ল এটি মোটেই গুরুত্বপূর্ণ নয় । বুস্টের কথা চিন্তা করুন, অন্যতম গুরুত্বপূর্ণ এবং প্রাসঙ্গিক সি ++ গ্রন্থাগার, এবং তাদের টিআর 1: বুস্ট.আরটিআর 1 বাস্তবায়ন। আপনি সি উন্নত করতে চান ++ এটা ফরোয়ার্ড সি ++ 11 সঙ্গে সামঞ্জস্যপূর্ণ করুন, তারপরে সংজ্ঞা দ্বারা আপনি এটা কিছু যে মধ্যে চালু করছেন না সি ++ 03, তাই নিজের একটি স্ট্যান্ডার্ড ধরে ব্লক যে আপনার এড়ান বা আসলে ফেলে যাত্তয়া মনস্থ , সহজভাবে বলতে গেলে, পাল্টা। পুরিস্টরা অভিযোগ করবেন, তবে সংজ্ঞা অনুসারে তাদের যত্ন নেওয়া উচিত নয়।
অবশ্যই, আপনি সর্বোপরি (03) স্ট্যান্ডার্ডটি অনুসরণ করবেন না এর অর্থ এই নয় যে আপনি চেষ্টা করতে পারবেন না, বা আনন্দের সাথে এটি ভঙ্গ করবেন। ঐটা আসল কথা না. আপনি যতক্ষণ std
নেমস্পেসে যুক্ত হন সে সম্পর্কে খুব সতর্কতা অবলম্বন করে রাখুন এবং আপনার সফ্টওয়্যারটি যেখানে ব্যবহার করা হচ্ছে এমন পরিবেশের নিয়ন্ত্রণ রাখবেন (যেমন: পরীক্ষা করুন!) কোনওরকম অপ্রতিরোধ্য ক্ষতি হওয়া উচিত নয়। যদি সম্ভব হয় তবে পৃথক নেমস্পেসে সমস্ত কিছু সংজ্ঞায়িত করুন এবং কেবল নেমস্পেসে using
নির্দেশিকা যুক্ত করুন std
যাতে আপনি "একেবারে" ভিতরে যাওয়ার দরকারের বাইরে সেখানে কিছু যোগ করছেন না। আইআইএনএম, বুস্ট.আরটিআর 1 বা আরও কম কি করবে।
আপডেট (2013) : মূল প্রশ্নের অনুরোধ হিসাবে এবং জবাবের অভাবের কারণে আমি যুক্ত করতে পারি না এমন কিছু মন্তব্য দেখার জন্য, এখানে সি ++ 11 এবং সি ++ 14 বৈশিষ্ট্যগুলির একটি তালিকা এবং তাদের বহনযোগ্যতার ডিগ্রি সি ++ 03 তে:
nullptr
: অফিসিয়াল কমিটির ব্যাকপোর্টের কারণে পুরোপুরি বাস্তবায়নযোগ্য; আপনাকে সম্ভবত কিছু টাইপ_ট্রেট বিশেষীকরণ সরবরাহ করতে হবে যাতে এটি একটি "নেটিভ" ধরণের হিসাবে স্বীকৃত হয়।
forward_list
: সম্পূর্ণরূপে প্রয়োগযোগ্য, যদিও বরাদ্দকারী সহায়তা আপনার ট্র 1 টি ইমপ্লিমেন্টেশন কী সরবরাহ করতে পারে তার উপর নির্ভর করে।
- নতুন অ্যালগরিদম (পার্টিশন_কপি ইত্যাদি): সম্পূর্ণরূপে প্রয়োগযোগ্য।
- ব্রেস-সিকোয়েন্সগুলি (যেমন
vector<int> v = {1, 2, 3, 4};
:) থেকে ধারক নির্মাণগুলি : সম্পূর্ণরূপে বাস্তবায়িত, যদিও একের চেয়ে আরও বেশি শব্দ পছন্দ করবে।
static_assert
: ম্যাক্রো হিসাবে প্রয়োগ করার সময় কাছাকাছি-সম্পূর্ণরূপে প্রয়োগযোগ্য (আপনাকে কেবল কমা দিয়ে সতর্ক থাকতে হবে)।
unique_ptr
: কাছাকাছি-সম্পূর্ণ বাস্তবায়নযোগ্য, তবে আপনার কলিং কোড থেকে সহায়তাও প্রয়োজন (সেগুলি পাত্রে সংরক্ষণ করার জন্য ইত্যাদি); নীচে যদিও দেখুন।
- মূল্য-রেফারেন্স: আপনি তাদের কাছ থেকে কতটা প্রত্যাশা করবেন তার উপর নির্ভর করে কাছাকাছি সম্পূর্ণরূপে বাস্তবায়নযোগ্য (যেমন: বুস্ট মুভ)।
- পূর্বাঞ্চ পুনরাবৃত্তি: কাছাকাছি-সম্পূর্ণরূপে বাস্তবায়িত, সিনট্যাক্স কিছুটা পৃথক হবে।
- স্থানীয় ফাংশনগুলি আর্গুমেন্ট হিসাবে ব্যবহার করে (উদাহরণস্বরূপ: রূপান্তর): কাছাকাছি-সম্পূর্ণরূপে বাস্তবায়িত, তবে সিনট্যাক্স যথেষ্ট পৃথক হবে - উদাহরণস্বরূপ, স্থানীয় ফাংশনগুলি কল সাইটটিতে সংজ্ঞায়িত করা হয়নি তবে ঠিক আগে।
- সুস্পষ্ট রূপান্তর অপারেটরগুলি: ব্যবহারিক স্তরে প্রয়োগযোগ্য (রূপান্তরটি স্পষ্ট করে দেওয়া), অসম্পূর্ণ সি ++ এর "স্পষ্টিক_কাস্ট" দেখুন; তবে ভাষার বৈশিষ্ট্যগুলির সাথে একীকরণ যেমন
static_cast<>
-অসাধ্য might
- আর্গুমেন্ট ফরোয়ার্ডিং: উপরোক্ত মূল্যায়ন-রেফারেন্সগুলিতে ব্যবহারিক স্তরের প্রয়োগযোগ্য, তবে আপনাকে ফরওয়ার্ডযোগ্য আর্গুমেন্ট গ্রহণ করে আপনার কার্যগুলিতে এন ওভারলোড সরবরাহ করতে হবে।
- সরান: বাস্তব স্তরে প্রয়োগযোগ্য (উপরের দুটি দেখুন) অবশ্যই, এ থেকে লাভ করার জন্য আপনাকে সংশোধক পাত্রে এবং অবজেক্টগুলি ব্যবহার করতে হবে।
- স্কোপযুক্ত বরাদ্দকারী: আপনার টিআর 1 বাস্তবায়ন যদি সহায়তা না করে তবে বাস্তবে বাস্তবায়িত হয় না।
- মাল্টিবাইট চরিত্রের প্রকারগুলি: আপনার টিআর 1 আপনাকে সমর্থন না করতে পারলে বাস্তবে বাস্তবায়িত হয় না। তবে উদ্দেশ্যপ্রাপ্ত উদ্দেশ্যে সি ++ 11 ব্যবহার করা সত্ত্বেও আইসিইউয়ের মতো বিষয়টির জন্য বিশেষভাবে তৈরি লাইব্রেরির উপর নির্ভর করা ভাল ।
- ভারিয়াদিক আর্গুমেন্টের তালিকা: কিছু ঝামেলা সহ কার্যকরযোগ্য, যুক্তি ফরোয়ার্ডিংয়ে মনোযোগ দিন।
noexcept
: আপনার সংকলক এর বৈশিষ্ট্য উপর নির্ভর করে।
- নিউ
auto
শব্দ এবং decltype
: - যেমন .: আপনার কম্পাইলার এর বৈশিষ্ট্য উপর নির্ভর করে __typeof__
।
- আকারের পূর্ণসংখ্যার প্রকারগুলি (
int16_t
ইত্যাদি): আপনার সংকলকের বৈশিষ্ট্যগুলির উপর নির্ভর করে - বা আপনি পোর্টেবল stdint.h এ উপস্থাপন করতে পারেন।
- বৈশিষ্ট্যগুলি টাইপ করুন: আপনার সংকলকের বৈশিষ্ট্যগুলির উপর নির্ভর করে।
- প্রারম্ভক তালিকা: আমার জ্ঞানের প্রয়োগযোগ্য নয়; তবে আপনি যদি চান সেটি সিকোয়েন্স সহ পাত্রে আরম্ভ করার জন্য, উপরের "ধারক নির্মাণ" উপর দেখুন see
- টেমপ্লেট অ্যালিজিং: আমার জ্ঞানের জন্য বাস্তবায়নযোগ্য নয়, তবে এটি যাইহোক একটি অনিবদ্ধ বৈশিষ্ট্য এবং আমরা
::type
টেমপ্লেটগুলিতে চিরকাল রেখেছি
- ভারিয়াদিক টেম্পলেটগুলি: আমার জ্ঞানের প্রয়োগযোগ্য নয়; বন্ধটি হ'ল টেমপ্লেট আর্গুমেন্ট ডিফল্ট, যার জন্য এন বিশেষীকরণ প্রয়োজন requires
constexpr
: আমার জ্ঞানের প্রয়োগযোগ্য নয়।
- ইউনিফর্ম ইনিশিয়ালাইজেশন: আমার জ্ঞানের জন্য প্রয়োগযোগ্য নয়, তবে গ্যারান্টিযুক্ত ডিফল্ট- কনস্ট্রাক্টর ইনিশিয়ালেশন আলা বুস্টের মান-প্রাথমিককরণ বাস্তবায়ন করা যেতে পারে।
- সি ++ 14
dynarray
: সম্পূর্ণরূপে প্রয়োগযোগ্য।
- সি ++ ১৪
optional<>
: আপনার সি ++ 03 সংকলক প্রান্তিককরণ সেটআপগুলিকে সমর্থন করে যতক্ষণ না প্রায় সম্পূর্ণরূপে কার্যকর হয়।
- সি ++ ১৪ স্বচ্ছ ফান্টেক্টর: কাছাকাছি-সম্পূর্ণ বাস্তবায়নযোগ্য, তবে আপনার ক্লায়েন্ট কোড সম্ভবত স্পষ্টভাবে উদাহরণস্বরূপ ব্যবহার
std::less<void>
করতে হবে .: এটি কার্যকর করতে।
- সি ++ ১৪ টি নতুন নতুন আসরেন্টের রূপগুলি (যেমন
assure
): আপনি যদি দৃser়ভাবে দাবি করতে চান তবে সম্পূর্ণরূপে বাস্তবায়নযোগ্য, আপনি পরিবর্তে নিক্ষেপ সক্ষম করতে চাইলে কাছাকাছি-সম্পূর্ণ বাস্তবায়নযোগ্য।
- সি ++ ১৪ টি টিপল এক্সটেনশান (টাইপ দিয়ে টিপল এলিমেন্ট পান): সম্পূর্ণরূপে বাস্তবায়িত এবং আপনি এমনকি বৈশিষ্ট্য প্রস্তাবনায় বর্ণিত সঠিক কেসগুলি সংকলন করতে ব্যর্থ হতে পারেন।
(অস্বীকৃতি: এই বৈশিষ্ট্যগুলির বেশ কয়েকটি আমার সি ++ ব্যাকপোর্ট লাইব্রেরিতে প্রয়োগ করা হয়েছে যা আমি উপরে লিঙ্ক করেছি, তাই আমি মনে করি আমি জানি যখন আমি "সম্পূর্ণ" বা "কাছাকাছি-সম্পূর্ণ" বলি তখন আমি কী সম্পর্কে কথা বলি))