Barton–Nackman trick
بارٹن-نیک مین ٹرک ایک اصطلاح ہے جو سی + + اسٹینڈرڈائزیشن کمیٹی (آئی ایس او/آئی ای سی جے ٹی سی 1/ایس سی 22 ڈبلیو جی 21) نے جان بارٹن اور لی نیک مین کی طرف سے محدود ٹیمپلیٹ کی توسیع کے طور پر متعارف کرائے گئے ایک فقرے کا حوالہ دینے کے لیے تیار کی ہے۔ فقرے کی خصوصیت کلاس فرینڈ فنکشن کی تعریف ہے جو تجسس سے بار بار آنے والے ٹیمپلیٹ پیٹرن (سی آر ٹی پی) کے بیس کلاس ٹیمپلیٹ جزو میں ظاہر ہوتی ہے۔ //مساوات کے موازنہ کے انٹرفیس کو ظاہر کرنے کے لیے کلاس ٹیمپلیٹ۔ ٹیمپلیٹ <ٹائپ نام T> کلاس کے برابر _ موازنہ کرنے والا {دوست بول آپریٹر = = (T کانسٹ & a، T کانسٹ & b) {واپسی a.equal_to (b) ؛} دوست بول آپریٹر! = (T کانسٹ & a، T کانسٹ & b) {واپسی! a.equal_to (b) ؛}} ؛// کلاس ویلیو _ ٹائپ = = اور! = رکھنا چاہتا ہے، لہذا یہ// برابر _ اپنے ساتھ بطور دلیل موازنہ کرنا چاہتا ہے (جو کہ CRTP ہے)۔ کلاس ویلیو _ ٹائپ: پرائیویٹ ایکول _ ایکولیوبل <ویلیو _ ٹائپ> {پبلک: بول ایکول _ ٹو (ویلیو _ ٹائپ کانسٹ & rhs) کانسٹ ؛// جس کی وضاحت کی جانی چاہیے} ؛ جب ایک کلاس ٹیمپلیٹ جیسے ایکول _ ایکولیوبل کو فوری طور پر ظاہر کیا جاتا ہے، تو کلاس میں موجود فرینڈ کی تعریفیں نان ٹیمپلیٹ (اور نان ممبر) فنکشنز (آپریٹر فنکشنز، اس صورت میں) پیدا کرتی ہیں۔ جس وقت فقرہ متعارف کرایا گیا تھا (1994)، سی + + زبان نے اوورلوڈڈ فنکشن ٹیمپلیٹس کے لیے جزوی ترتیب کی وضاحت نہیں کی تھی اور اس کے نتیجے میں، اوورلوڈنگ فنکشن ٹیمپلیٹس کے نتیجے میں اکثر ابہام پیدا ہوتا ہے۔ مثال کے طور پر، آپریٹر = = بطور ٹیمپلیٹ <ٹائپ نام T> بول آپریٹر = = (T کانسٹ & a، T کانسٹ & b) {/*. */} کے لیے ایک عام تعریف حاصل کرنے کی کوشش کرنا بنیادی طور پر ٹیمپلیٹ <ٹائپ نام T> بول آپریٹر = = (ارے <T> کانسٹ & a، ارے <T> کانسٹ & b) {/*. * * * جیسی دوسری تعریف کے ساتھ مطابقت نہیں رکھتا ہے۔ بارٹن-نیک مین چال، پھر، اس طرح کی ابہام سے نمٹنے کے بغیر ایک عام صارف سے متعین مساوات آپریٹر فراہم کرنے کا ہدف حاصل کرتی ہے۔ فقرے کے نام میں محدود صفت اس حقیقت سے مراد ہے کہ فراہم کردہ کلاس فنکشن کی تعریف دی گئی کلاس ٹیمپلیٹ کی تخصصات تک محدود (صرف لاگو ہوتی ہے) ہے۔ یہ اصطلاح بعض اوقات غلطی سے کیوریسلی ریکرنگ ٹیمپلیٹ پیٹرن (سی آر ٹی پی) کے لیے استعمال کی جاتی ہے۔ جیسا کہ اوپر بیان کیا گیا ہے، بارٹن-نیک مین چال، اس کے بجائے، ایک الگ فقرہ ہے (جو سی آر ٹی پی پر منحصر ہے)۔ یہ کیسے کام کرتا ہے جب مرتب کرنے والا اظہار v1 = = v2 کا سامنا کرتا ہے جہاں v1 اور v2 ٹائپ ویلیو ٹائپ کے ہوتے ہیں، تو یہ آپریٹر = = کے لیے دلیل پر منحصر تلاش (ADL) کی کوشش کرتا ہے۔ اس تلاش میں ویلیو ٹائپ اور اس کی بنیادی کلاسوں میں بیان کردہ فرینڈ فنکشنز پر غور کرنا شامل ہے۔ (نوٹ کریں کہ اگر ویلیو _ ٹائپ ایک نامکمل ٹیمپلیٹ مثال تھی، تو ADL اس کی مکمل فوری کاری کو متحرک کرے گا۔) بارٹن-نیک مین چال اصل میں اے ڈی ایل پر نہیں بلکہ "فرینڈ نیم انجیکشن" نامی سی + + خصوصیت پر انحصار کرتی تھی، جس میں فرینڈ فنکشن کے کلاس میں اعلامیے نے فنکشن کے نام کو فوری طور پر آس پاس کے نیم اسپیس کے دائرہ کار (ممکنہ طور پر عالمی دائرہ کار) میں دکھائی دیا۔ سی + + پروگرامنگ زبان سے فرینڈ نیم انجکشن کو ہٹانے کے امکان کی تحقیقات کرتے وقت، بارٹن اور نیک مین کا فقرہ اس زبان کے اصول کا واحد معقول استعمال پایا گیا۔ آخر کار، دلیل پر منحصر تلاش کے قوانین کو کم سخت میکانزم کے ذریعے فرینڈ نیم انجیکشن کو تبدیل کرنے کے لیے ایڈجسٹ کیا گیا، جو اوپر بیان کیا گیا ہے، جس نے بارٹن اور نیک مین کی تکنیک کی صداقت کو برقرار رکھا۔ یہ بات قابل غور ہے کہ، اس تبدیلی کے نتیجے میں، اظہار:: آپریٹر = = (v1، v2) اب درست نہیں ہے، کیونکہ اہل نام ADL کے تابع نہیں ہیں اور دوست کے اعلانات عام تلاش کے ذریعے نہیں ملتے ہیں۔ یہ بھی نوٹ کریں کہ فرینڈ اسپیسیفائر ضروری ہے، چاہے ڈیفائنڈ فرینڈ فنکشنز کو دراصل فرینڈنگ کلاس کے غیر عوامی اراکین تک رسائی کی ضرورت نہ ہو۔ دلچسپ طور پر بار بار آنے والے ٹیمپلیٹ پیٹرن کے حوالہ جات مزید پڑھنے کے پروگرامنگ کے فقرے مضامین مثال کے طور پر C + + کوڈ C + + کے ساتھ دیکھیں۔