События в C++

Как прокомментировал @Quimby, решение можно найти здесь здесь

Проблема заключалась в том, что SFML требует, чтобы вы устанавливали буфер глубины через настройки окна.

22
задан Robert 26 October 2008 в 22:46
поделиться

5 ответов

Я использую sigslot для точно этой цели.

11
ответ дан 29 November 2019 в 04:23
поделиться

Смотрите на повышение библиотека сигнала . Объединенный с функция и связывает библиотеки, можно сделать точно, что Вы ищете.

19
ответ дан 29 November 2019 в 04:23
поделиться

Шаблон "наблюдатель" от GOF в значительной степени, что Вы хотите.

В книге, это имеет код C++ для этого...

кроме того, как всегда, Повышение имеет материал, который можно использовать также

8
ответ дан 29 November 2019 в 04:23
поделиться

Существует собственный Visual C++ система событий . Это главным образом для COM, но это имеет собственную поддержку C++ также.

От здесь :

[event_source(native)]
class CSource {
public:
   __event void MyEvent(int nValue);
};

[event_receiver(native)]
class CReceiver {
public:
   void MyHandler1(int nValue) {
      printf_s("MyHandler1 was called with value %d.\n", nValue);
   }

   void MyHandler2(int nValue) {
      printf_s("MyHandler2 was called with value %d.\n", nValue);
   }

   void hookEvent(CSource* pSource) {
      __hook(&CSource::MyEvent, pSource, &CReceiver::MyHandler1);
      __hook(&CSource::MyEvent, pSource, &CReceiver::MyHandler2);
   }

   void unhookEvent(CSource* pSource) {
      __unhook(&CSource::MyEvent, pSource, &CReceiver::MyHandler1);
      __unhook(&CSource::MyEvent, pSource, &CReceiver::MyHandler2);
   }
};

int main() {
   CSource source;
   CReceiver receiver;

   receiver.hookEvent(&source);
   __raise source.MyEvent(123);
   receiver.unhookEvent(&source);
}
6
ответ дан 29 November 2019 в 04:23
поделиться

Я использую libsigc ++ . Это является собственным для gtkmm.

А простой пример losely адаптированный от учебное руководство :

#include <iostream>
#include <sigc++/sigc++.h>

using namespace std;

class AlienDetector {
public:
        void run ();
        sigc::signal<void> signal_detected;
};

void warn_people () {
        cout << "There are aliens in the carpark!" << endl;
}

void AlienDetector::run () {
        signal_detected.emit ();
}

int main () {
        AlienDetector mydetector;
        mydetector.signal_detected.connect (sigc::ptr_fun (warn_people));
        mydetector.run ();
}

Это также обеспечивает механизм для соединения функций членства конкретных объектов к сигналам с помощью sigc:: mem_fun вместо sigc:: ptr_fun:

sigc::mem_fun (someobject, &SomeClass::some_method);

Это в значительной степени обеспечивает что-либо, что возможно с Бойкими сигналами.

3
ответ дан 29 November 2019 в 04:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: