ما هي الدوال الكائنية (Functors) في C++ ولماذا نحتاجها؟
مرحبًا! أنا أدرس C++ وقد صادفت مصطلح "functor". قرأت أنه شيء يشبه الكائن الذي يتصرف كدالة. لكنني لا أفهم تمامًا لماذا نحتاج إليه إذا كانت هناك دوال عادية ومؤشرات للدوال.
على سبيل المثال، أعلم أنه يمكنني تمرير دالة إلى `std::sort` كدالة مقارنة:
```cpp
bool compare(int a, int b) {
return a < b;
}
std::sort(vec.begin(), vec.end(), compare);
```
لكن لماذا نستخدم كائنًا مع `operator()` المُعاد تعريفه؟ ما الميزة؟ سمعت أن functors يمكنها تخزين حالة (state)، لكنني لا أفهم كيفية تطبيق ذلك عمليًا. هل يمكنك الشرح بمثال بسيط حيث يكون functor أكثر فائدة من دالة عادية؟
وسؤال آخر: هل functors هي نفسها تعبيرات lambda؟ أم أنها أشياء مختلفة؟ سأكون ممتنًا لشرح مفصل مع أمثلة كود.
<<>>
ما هو functor؟
functor (أو كائن وظيفي) هو class أو struct يتم فيه تعريف عامل استدعاء الدالة operator() بشكل مُعاد.