سؤال

ما الذي يعنيه المندوبون في C ++ ، هل تعمل Sort في C/C ++ والتي تأخذ وظيفة المقارنة/functor كمعلمة الأخيرة هي شكل من أشكال المندوب؟

هل كانت مفيدة؟

المحلول

"مندوب" ليس حقًا جزءًا من مصطلحات C ++. في C# ، إنه شيء يشبه مؤشر الوظيفة المجيد الذي يمكنه تخزين عنوان كائن بالإضافة إلى استدعاء وظائف الأعضاء. يمكنك بالتأكيد كتابة شيء مثل هذا في C ++ كميزة مكتبة صغيرة. أو حتى أكثر عامة: الجمع boost::bind<> مع boost::function<>.

في C ++ نستخدم مصطلح "كائن الوظيفة". كائن الوظيفة هو أي شيء (بما في ذلك مؤشرات الوظائف) "قابلة للاتصال" عبر مشغل استدعاء الوظائف ().

STD :: SORT يأخذ "مسند" وهو كائن وظيفة خاص لا يعدل وسيطاته ويعيد قيمة منطقية.

نصائح أخرى

يمكن إحالة وظائف رد الاتصال في C ++ (فضفاضة) كشكل من أشكال delegates ( رغم ذلك delegate لا يستخدم المصطلح لهذا). تستخدم وظائف رد الاتصال مؤشرات لوظائف لتمريرها كمعلمات إلى وظائف أخرى. لكن المندوبين في C# أكثر تقدمًا مقارنة بوظائف رد الاتصال في C ++.

لتفويض العمل يعني مشاركة عبء العمل مع الآخرين. في الحياة الحقيقية ، إذا كنت تريد تفويض مهمتك ، أي إذا كنت مديرًا ، فستشارك عملك متوقعًا أن يكمل الآخرون مهمة دون أن تعرف كيف.

المفهوم هو نفسه في C ++ وأي لغات أخرى لها قدرة المندوبين. في ج ، يمكنك أن ترى هذا كمندوب:

int calculate(int (*func)(int c), int a, int b)

نظرًا لأنه من المتوقع أن ترسل مؤشرًا ، إلى وظيفة أخرى ستحسب بعض العمل من أجلك. لقد كتبت مؤخرًا مشاركة مدونة على مؤشرات الوظيفة في Python و C ، تحقق من ذلك ، قد تجدها مفيدة. قد لا تكون هذه هي الطريقة "التقليدية" لتفويض العمل في C أو C ++ ، ولكن مرة أخرى ، يقول termonoligy إنني على صواب بعض الشيء.

وفد يستخدم في الغالب كوسيلة لتمرير الوظائف إلى الوظائف المضمنة في فئة (pimpl ، التجميع ، الميراث الخاص). وهي وظائف (مضمّنة) بشكل أساسي لخط واحد ، ودعا وظائف فئات الأعضاء. على حد علمي ، لا علاقة له بمندوبي C#.

وبهذا المعنى ، فإن مؤشر الوظيفة كما هو مستخدم في QSort ليس مندوبًا ، ولكنه رد اتصال يمكن فيه تمديد وحدات الإطار بواسطة برامج المستخدم كما في مبدأ هوليوود.

مندوب: كائن يعمل مثل مؤشر متعدد الوظائف مع نظام اشتراك. إنه يبسط حقًا استخدام مؤشرات وظيفة الأعضاء الثابتة أو "كائن" لإشعارات رد الاتصال ومعالجة الأحداث.

هذه يشرح الرابط المندوبين بطريقة واضحة أو يمكنك أيضًا الرجوع إلى MSDN حلقة الوصل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top