ما المقصود من قبل المندوبين في C ++؟
سؤال
ما الذي يعنيه المندوبون في 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 ليس مندوبًا ، ولكنه رد اتصال يمكن فيه تمديد وحدات الإطار بواسطة برامج المستخدم كما في مبدأ هوليوود.