Как прокомментировал @Quimby, решение можно найти здесь здесь
Проблема заключалась в том, что SFML требует, чтобы вы устанавливали буфер глубины через настройки окна.
Смотрите на повышение библиотека сигнала . Объединенный с функция и связывает библиотеки, можно сделать точно, что Вы ищете.
Шаблон "наблюдатель" от GOF в значительной степени, что Вы хотите.
В книге, это имеет код C++ для этого...
кроме того, как всегда, Повышение имеет материал, который можно использовать также
Существует собственный 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);
}
Я использую 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);
Это в значительной степени обеспечивает что-либо, что возможно с Бойкими сигналами.