گزارش فنی ۱ سی‌پلاس‌پلاس کیست؟ توضیح بده.
گزارش فنی ۱ سی‌پلاس‌پلاس نام رایج ISO/IEC TR 19768، C++ Library Extensions است، که درواقع سندی است که اضافاتی را به کتابخانه استاندارد سی‌پلاس‌پلاس برای استاندارد C++03 پیشنهاد می‌کند. این اضافات، شامل عبارات باقاعده، اشاره‌گرهای هوشمند، جداول درهمک‌سازی و مولدهای اعداد شبه‌تصادفی است. TR1 خودش یک استاندارد نبود، بلکه یک سند پیش‌نویس بود. با این حال، بیشتر پیشنهادهای آن، بخشی از استاندارد رسمی بعدی، C++11 شد. قبل از استانداردسازی C++11، سازندگان از این سند به عنوان راهنما برای ایجاد اکستنشن‌ها استفاده می‌کردند. هدف این گزارش «ایجاد شیوه‌های موجود برای گسترده‌ترسازی کتابخانه استاندارد سی‌پلاس‌پلاس» بود.این گزارش برای اولین بار به صورت پیش‌نویس در سال ۲۰۰۵ به عنوان پیش‌نویس گزارش فنی در مورد پسوندهای کتابخانه سی‌پلاس‌پلاس منتشر شد، سپس در سال ۲۰۰۷ تحت استاندارد ISO/IEC به عنوان ISO/IEC TR 19768:2007 منتشر گردید.بررسی اجمالی.کامپایلرها برای انطباق با استاندارد سی‌پلاس‌پلاس نیازی به گنجاندن اجزای گزارش فنی ۱ نداشتند، زیرا پیشنهادهای TR1 بخشی از خود استاندارد نبودند، فقط مجموعه‌ای از اضافات احتمالی بودند که باید تأیید می‌شدند. با این حال، بیشتر TR1 در کتابخانه بوست در دسترس قرار داشت و چندین توزیع‌کننده کامپایلر/کتابخانه همه یا برخی از مؤلفه‌های TR1 را پیاده‌سازی کرده بودند. TR1 لیست کاملی از موارد اضافه‌شده به C++11 نیست. به عنوان مثال، C++11 شامل یک کتابخانه پشتیبانی Thread است که در TR1 موجود نیست.اجزای جدید در فضای نام codice_1 تعریف شدند تا آنها را از کتابخانه استاندارد فعلی متمایز کند.اجزاء.گزارش فنی ۱ شامل اجزای زیر است:خدمات عمومی.الگوی آداپتور رفرنس – انتقال ارجاعات را به جای کپی، در الگوریتم‌ها یا اشیاء تابع فعال می‌کند. این ویژگی مبتنی بر کتابخانه Boost.Ref بود. یک الگوی آداپتور مرجع از نمونه‌ای از قالب-کلاس codice_2 به دست می‌آید. الگوی آداپتور مراجع، مشابه مراجع معمولی ('&amp;') زبان ++C هستند. برای به‌دست آوردن یک الگوی آداپتور مرجع از هر شی از قالب-کلاس codice_3 استفاده می‌شود (برای codice_4 از مرجع ثابت استفاده می‌شود).ارجاعات Wrapper، بیش از همه برای قالب-توابع مفید هستند، زمانی که کسر آرگومان، مرجعی را استنتاج نمی‌کند (مثلاً هنگام ارسال آرگومان‌ها):template &lt;class Funct, class Arg&gt;void g(Funct f, Arg t) f(t);int main() int i = 0; g(f, i); // 'g&lt; void(int &amp;r), int &gt;' is instantiated std::cout « i « "\n"; // Output: 0 g(f, std::tr1::ref(i)); // 'g&lt; void(int &amp;r), reference_wrapper&lt;int&gt; &gt;' is instanced std::cout « i « "\n"; // Output: 1اشاره‌گرهای هوشمند - چندین کلاس را اضافه می‌کند که مدیریت طول عمر شیء را در موارد پیچیده ساده می‌کند. سه کلاس اصلی اضافه شده‌است:این پروپوزال بر اساس کتابخانه Boost Smart Point می‌باشد.اشیاء تابع.این چهار ماژول به فایل سربرگ codice_8 اضافه شدند:بسته‌بندی تابع چندریختی (codice_9) - می‌تواند هر تابع قابل فراخوانی (اشاره‌گر تابع، اشاره‌گر تابع عضو و اشیاء تابع) را که از امضای فراخوانی تابع مشخصی استفاده می‌کند، ذخیره کند. تایپ، به نوع فراخوانی موردنظر بستگی ندارد. بر اساس Boost.Functionبایندرهای شی تابع (codice_10) - هر پارامتر می‌تواند پارامترهایی را به اشیاء تابع متصل کند. ترکیب تابع نیز مجاز است. این مورد، یک نسخه کلی از توابع استاندارد codice_11 و codice_12 bind است. این ویژگی بر اساس کتابخانه Boost Bind پیشنهاد داده شد.انواع بازگشتی تابع (codice_13) - نوع عبارت فراخوانی را تعیین می‌کند.توابع عضو (codice_14) – بعداً به انواع استاندارد codice_15 و codice_16 ارتقاء داده شد. به اشاره‌گرهای توابع عضو اجازه می‌دهد تا به عنوان اشیاء تابع در نظر گرفته شوند. بر اساس کتابخانه Boost Mem Fn.متاپروگرمینگ و ویژگی‌های نوع.اکنون فایل سربرگ codice_17 وجود دارد که حاوی بسیاری از متا-قالب‌های صفتی مفید است، مانند codice_18 ، codice_19 ، codice_20 و…. این قابلیت با فعال‌کردن پرس‌وجوها و تبدیل بین انواع مختلف، متاپروگرمینگ را آسان می‌نماید. این پیشنهاد براساس کتابخانه Boost Type Traits است.امکانات عددی.توابع ویژه ریاضی.برخی از ویژگی‌های TR1، مانند توابع ویژه ریاضی و برخی از اضافات C99، در پیاده‌سازی Visual C++ TR1 گنجانده نشده‌اند. کتابخانه توابع ویژه ریاضی در C++11 استانداردسازی نشده بود.این توابع احتمالاً مورد توجه برنامه‌نویسان در رشته‌های مهندسی و علمی قرار خواهند گرفت.جدول زیر تمام ۲۳ عملکرد ویژه توصیف شده در TR1 را نشان می‌دهد.هر تابع دو نوع دیگر دارد. اضافه کردن پسوند " f " یا " l " به نام تابع، تابعی را به دست می‌دهد که به ترتیب بر روی مقادیر codice_29 codice_30 یا طولانی عمل می‌کند. مثلا:float sph_neumannf(unsigned n, float x) ;long double sph_neumannl(unsigned n, long double x) ;سازگاری با C.سی‌پلاس‌پلاس به گونه‌ای طراحی شده‌است که با زبان برنامه‌نویسی C سازگار باشد، اما به دلیل استانداردهای متفاوت، زیرمجموعه خاصی از C نیست. TR1 سعی می‌کند برخی از این تفاوت‌ها را از طریق افزودن سرصفحه‌های مختلف در کتابخانه سی‌پلاس‌پلاس، مانند &lt;complex&gt;، &lt;locale&gt;، &lt;cmath&gt; و… تطبیق دهد. این تغییرات به تطابق بیشتر سی‌پلاس‌پلاس با نسخه C99 استاندارد C کمک می‌کند (همه قسمت‌های C99 در TR1 گنجانده نشده‌اند).گزارش فنی ۲.در سال ۲۰۰۵، درخواستی برای پیشنهادها برای یک TR2 با تمرکز ویژه بر روی Unicode, XML/HTML، شبکه و قابلیت استفاده برای برنامه‌نویسان تازه‌کار انجام شد. فراخوان TR2 برای پروپوزال‌هابرخی از پیشنهادها شامل اینها بودند:پس از صدور فراخوان برای پیشنهادهای TR2، رویه‌های ISO تغییر کرد، بنابراین TR2 وجود نخواهد داشت. در عوض، بهبودهای سی‌پلاس‌پلاس در تعدادی از مشخصات فنی منتشر خواهد شد. برخی از پیشنهادهای ذکر شده در بالا قبلاً در استاندارد سی‌پلاس‌پلاس یا در نسخه‌های پیش‌نویس مشخصات فنی گنجانده شده‌اند.