Boost.Signals позволяет различным стратегиям использовать возвращаемые значения слотов для формирования возвращаемого значения сигнала.Например, добавляя их, формируя из них vector
или возвращая последний.
Общая мудрость (выраженная в документации Qt [EDIT: , а также некоторые ответы на этовопрос ] ) заключается в том, что с сигналами Qt такое сделать невозможно.
Однако, когда я запускаю moc для следующего определения класса:
class Object : public QObject {
Q_OBJECT
public:
explicit Object( QObject * parent=0 )
: QObject( parent ) {}
public Q_SLOTS:
void voidSlot();
int intSlot();
Q_SIGNALS:
void voidSignal();
int intSignal();
};
Не толькоМос не жалуется на сигнал с типом возврата, не являющимся пустым, он, кажется, активно реализует его таким образом, чтобы разрешить передать возвращаемое значение:
// SIGNAL 1
int Object::intSignal()
{
int _t0;
void *_a[] = { const_cast<void*>(reinterpret_cast<const void*>(&_t0)) };
QMetaObject::activate(this, &staticMetaObject, 1, _a);
return _t0;
}
Итак, согласно документам, это невозможно.Тогда что же здесь делает moc?
Слоты могут иметь возвращаемые значения , поэтому можно ли сейчас подключить слот с возвращаемым значением к сигналу с возвращаемым значением?Может ли это быть возможным, в конце концов?Если да, то полезно ли это?
РЕДАКТИРОВАТЬ: Я не прошу обходных путей, поэтому, пожалуйста, не предоставляйте никаких.
РЕДАКТИРОВАТЬ: Очевидно, что это бесполезно в режиме Qt::QueuedConnection
(как и QPrintPreviewWidget API , хотя он все еще существует и полезен).Но как насчет Qt::DirectConnection
и Qt::BlockingQueuedConnection
(или Qt::AutoConnection
, когда он разрешается до Qt::DirectConnection
).