Приблизительно следующая проблема:
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. Надеюсь не ошибся с выбором форума — я здесь впервые.