Stephen Kelly wrote:

> Thiago Macieira wrote:
> 
>> On Wednesday, 21 de September de 2011 15.12.21, Thiago Macieira wrote:
>>> There's no way around it. Since we're using the function pointer
>>> (actually, the PMF) to identify the signal, you must have C++ access to
>>> the signal function. That means you must be able to call it.
>>> 
>>> Other template-based signal libraries have the same problem. It cannot
>>> be avoided unless you have a way to identify the signal which doesn't
>>> include access to the actual signal implementation.
>>> 
>>> One solution to that would be to have an enum of signals, instead of
>>> identifying by an object or by a PMF.
>> 
>> Another solution (also by way of adding an indirection) is to add a
>> function that emits, which is protected.
>> 
>> template <typename Klass, typename... Args>
>> void QObject::emitSignal(void (Klass:: *signal)(Args...), Args... args);
>> 
>> Then you'd write:
>> emitSignal(&Me::textChanged, newText);
>> instead of:
>> emit textChanged(newText);
>> 
>> The template magic to make that happen is already present.
>> 
>> However, it would be completely source-incompatible with the existing
>> code, which is a big no-no. It would require making the signal functions
>> themselves not do anything -- only serve as identifiers.
>> 
> 
> For source compatibility they could be implemented by moc to work as
> currently, no?

Oh, they need to keep the current implementation so that SIGNAL and SLOT 
based connections still work. Never mind me.


_______________________________________________
Qt5-feedback mailing list
[email protected]
http://lists.qt.nokia.com/mailman/listinfo/qt5-feedback

Reply via email to