Я следил за официальной документацией для 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
не определены, и поэтому этот код не должен компилироваться (но в документе AlienDetector
факт, что этот код будет работать).
Еще более странным является тот факт, что если я определяю как run()
и конструктор для класса, я все равно не вижу эффекта библиотеки, по-видимому, сигнал не работает, и когда run
вызывается в main
без слота активируется.
Я что-то забываю о чем-то здесь? Как эта вещь должна быть переписана?
Документация кажется неполной.
Самая базовая версия кода должна выглядеть так:
AlienDetector::AlienDetector() {}
void AlienDetector::run() {
sleep(3); // wait for aliens
signal_detected.emit(); // panic
}
Я опубликовал полностью функциональный пример make-based на github, example1.cpp - это первый пример, example2.cpp - это один, который использует функцию-член.