Я следовал официальной документации для libsigc++-2.0
и я нашел этот пример:
class AlienDetector
{
public:
AlienDetector();
void run();
sigc::signal<void> signal_detected;
};
void warn_people()
{
cout << "There are aliens in the carpark!" << endl;
}
int main()
{
AlienDetector mydetector;
mydetector.signal_detected.connect( sigc::ptr_fun(warn_people) );
mydetector.run();
return 0;
}
Как вы можете видеть как run()
функция и конструктор для AlienDetector
класс не определен, и поэтому этот код не должен компилироваться (но документ принимает как должное тот факт, что этот код будет работать).
Еще более странным является тот факт, что если я определю оба run()
и конструктор для класса, я все равно не вижу эффекта библиотеки, видимо сигнал не работает, и когда run
называется в main
слот не активирован.
Я забыл о чем-то здесь? Как эта вещь должна быть переписана?
Документация кажется неполной.
Самая базовая версия кода должна выглядеть так:
AlienDetector::AlienDetector() {}
void AlienDetector::run() {
sleep(3); // wait for aliens
signal_detected.emit(); // panic
}
Я разместил полностью функциональный пример на основе make на GitHub, example1.cpp — первый пример, example2.cpp — тот, который использует функцию-член.
Других решений пока нет …