boost::signals - сигнал не желает работать без слотов
От: zorgg http://elens.ru
Дата: 14.11.04 21:58
Оценка:
Приблизительно следующая проблема:

class MyClass
{
   ...
public:
    void DoMouseDown();

    boost::signal3<bool, UINT, UINT, UINT>      onMouseDown;
   ...

}

...

void MyClass::DoMouseDown()
{
    onMouseDown( 10, 20, 0 );
}


Если перед вызовом DoMouseDown, сигнал был соединен с хотя бы одним слотом — все работает на "ура". Если же вызвать сигнал без присоединенных слотов — получаем "assertion failed" (/boost/last_value.hpp, line 23, first != last). Можно было бы предположить, что разработчики не увидели необходимости в возможности вызова "пустых" сигналов, если бы не один из примеров (из tutorials)

boost::signals::connection c = sig.connect(HelloWorld());
if (c.connected()) {
// c is still connected to the signal
  sig(); // Prints "Hello, World!"
}

c.disconnect(); // Disconnect the HelloWorld object
assert(!c.connected()); //c isn't connected any more

sig(); // Does nothing: there are no connected slots


Вот на этом последнем вызове sig(), который "does nothing", у меня все и валится.

Я, наверно, что-то делаю не так?

PS. Надеюсь не ошибся с выбором форума — я здесь впервые.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.