[Development] [Interest] Qt5: Problem connecting QTimer::timeout() to lambda
Thiago Macieira
thiago.macieira at intel.com
Fri Nov 2 16:01:58 CET 2012
On sexta-feira, 2 de novembro de 2012 09.41.06, Olivier Goffart wrote:
> > Why doesn't the code use the number of arguments from the receiver instead
> > of the sender? We did that for regular functions and member functions.
>
> Because for regular functions slot, I can knw that. The arguments are in
> the template argument.
>
> When I do QtPrivate::FunctionPointer<&MyObject::mySlot>::AgumentCount, the
> partial template specialisation is chosen (imagine mySlot has two
> arguments)
>
> template<class Obj, typename Ret, typename Arg1, typename Arg2>
> struct FunctionPointer<Ret (Obj::*) (Arg1, Arg2)> {
> enum {ArgumentCount = 2}; ... }
>
> Hence, I know I can call the function with just the two first argument of
> the signal.
I don't care about C++98 for this functionality. It's provided as a "best
effort" basis, with known limitations. Nominally, the new syntax of the
connection mechanism is a feature that requires C++11.
So please tell me how the above works with variadic templates.
> However, in the case of a functor, I have not found a way.
> struct MyFunctor{ void operator()(); };
There is a function, it's just MyFunctor::operator(). Why can't we do the
same?
> QtPrivate::FunctionPointer<&MyFunctor::operator()> will not work in case
> there are several operator().
That is a good point, but an acceptable compromise.
> With C++11, it would be possible to do something like
>
> template<typename Functor, typename ... SignalArgs>
> test(Functor&f, SignalArgs... &args) ->
> enable_if<(sizeof(f(args...))>0),yes>;
>
> And if it does not exist, try removing the last argument from signal args
> and see if that exist.
>
> Something like that could be done for Qt 5.1 (or even maybe Qt 5.0) But I
> don't know how to do it without C++11.
Then let's do it, since we don't need C++98 support for this.
> And connecting to functor works without C++11 (now, it is probably ok to
> say that connecting to functor with less arguments than the signal is only
> working with C++11)
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel Open Source Technology Center
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 190 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.qt-project.org/pipermail/development/attachments/20121102/013f6308/attachment.sig>
More information about the Development
mailing list