أفضل مثال على جافا مثل محولات التعامل مع الأحداث في C ++

StackOverflow https://stackoverflow.com/questions/1117230

سؤال

أقوم ببعض الأبحاث في كيفية تنفيذ مخطط مناولة الأحداث في C ++ التي يمكن أن تكون أسرع مثلها لتنفذ A APTPER إلى فئة في Java. المشكلة هي أنه مع النهج الموضح أدناه، سأحتاج إلى أن يكون لديك جميع المحولات التي تم تنفيذها بالفعل مع وظيفتها قد تجاوزت في الفئة المنحرفة (لأن الرابط يحتاج إليها). على الجانب الآخر، باستخدام استراتيجية مفوضة حيث يمكنني استخدام المحول فقط في الفئة المشتقة يجب أن تعني أداء أقل بالنظر إلى الطريقة التي يجب تنفيذها.

Wich One، أو ماذا على آخر يجب أن يكون أفضل نهج لذلك؟

class KeyboardAdapter  
{  
public:  
    virtual void onKeyDown(int key) = 0;  
}

class Controller : public KeyApadter  
{  
private:  
   void onKeyDown(int key);  
}  

void Controller::onKeyDown(int key) {}

class UserController : public Controller {
private:
    void onKeyDown(int key);
}

void UserController::onKeyDown(int key) {
   // do stuff
}

int main() {
  UserController * uc = new UserController();
  Controller * c = uc;
  c->_onKeyDown(27);
}
هل كانت مفيدة؟

المحلول

إلقاء نظرة على Boost.Signals Library مثال على كيفية تنفيذ الحدث معالجة بدون فصول مع وظائف افتراضية (http://www.boost.org/doc/libs/1_39_0/doc/html/signals.html.).

نصائح أخرى

بالنظر إلى أن الكود الخاص بك يبدو أنه يتعامل مع ضغطات المفاتيح من المستخدم، وبالنظر إلى أن أنواع لا أحد أسرع من، على سبيل المثال، 100-150 كلمة في الدقيقة، لن تقلق كثيرا بالكفاءة. فقط تفعل ذلك بالطريقة التي تجعلك الأكثر إلحاقا لك.

إلى جانب تعزيز :: إشارات، يمكنك محاولة SIGC ++.. وبعد يتم استخدامه من قبل GTKMM C ++ GTK / GLIB GTKMM. يبدو أن تناسب احتياجاتك.

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