рдХреИрд╕реЗ рд╕рдВрдХреЗрдд рдФрд░ рд╕реНрд▓реЙрдЯ Qt рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ (рднрд╛рдЧ 2)



рдПрдХ рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ: рдпрд╣ рдХреНрдпреВрдЯреА 5 рдореЗрдВ рд╕рдВрдХреЗрддреЛрдВ рдФрд░ рд╕реНрд▓реЙрдЯреНрд╕ рдХреА рдЖрдВрддрд░рд┐рдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░ рдУрд▓рд┐рд╡рд┐рдпрд░ рдЧреЛрдлрд░реНрдЯ рдХреЗ рдПрдХ рд▓реЗрдЦ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рд╣реИ, рдкрд╣рд▓реЗ рднрд╛рдЧ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдпрд╣рд╛рдВ рд╣реИ ред

Qt5 рдореЗрдВ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕

рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

QObject::connect(&a, &Counter::valueChanged, &b, &Counter::setValue); 

рдореИрдВрдиреЗ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд╛рднреЛрдВ рдХрд╛ рдкрд╣рд▓реЗ рд╣реА рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдирдпрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╕рдВрдХрд▓рд┐рдд рд╕рдордп рдкрд░ рд╕рдВрдХреЗрддреЛрдВ рдФрд░ рд╕реНрд▓реЙрдЯреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рд╡реЗ рдареАрдХ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдФрд░, рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЖрдкрдХреЛ рд▓реИрдореНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдирдП рдЕрддрд┐рднрд╛рд░рд┐рдд рддрд░реАрдХреЗ

рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЧрдП рдереЗред рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдирдпрд╛ рд╣реИ QObject :: рдУрд╡рд░рд▓реЛрдб рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рдЬреЛ рдлрдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ char * рдХреЗ рдмрдЬрд╛рдп рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВред рдпреЗ рддреАрди рдирдП рддрд░реАрдХреЗ рд╣реИрдВ (рдЫрджреНрдо рдХреЛрдб):

 QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction slot, Qt::ConnectionType type); QObject::connect(const QObject *sender, PointerToMemberFunction signal, PointerToFunction method) QObject::connect(const QObject *sender, PointerToMemberFunction signal, Functor method) 

рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдкреБрд░рд╛рдиреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рдХреА рд╡рд┐рдзрд┐ рд╣реИ: рдЖрдк рдкреНрд░реЗрд╖рдХ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рд░рд┐рд╕реАрд╡рд░ рд╕реНрд▓реЙрдЯ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЕрдиреНрдп рджреЛ рдЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рд░рд┐рд╕реАрд╡рд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕реНрдерд┐рд░ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрдЯрд░ рдХреЛ рд╕рд┐рдЧреНрдирд▓ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИрдВ рдФрд░ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдо рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред

рд╕рджрд╕реНрдп рд╕рдорд╛рд░реЛрд╣ рд╕реВрдЪрдХ

рдЕрдкрдиреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдпрд╣рд╛рдБ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХреЛрдб рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреЙрдЗрдВрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ:

 //  myFunctionPtr   - //   void     int void (QPoint::*myFunctionPtr)(int); myFunctionPtr = &QPoint::setX; QPoint p; QPoint *pp = &p; (p.*myFunctionPtr)(5); //  p.setX(5); (pp->*myFunctionPtr)(5); //  pp->setX(5); 

рд╕рджрд╕реНрдп рд╕рдВрдХреЗрдд рдФрд░ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдХреЗрдд C ++ рд╕рдмрд╕реЗрдЯ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрдо рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ Qt рдФрд░ рдЗрд╕ рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХрдиреЗрдХреНрд╢рди рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рдордиреЗ рдФрд░ рдЙрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЛ рдЬрд╛рджреВ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ :: *, *ред * рдпрд╛ -> *ред рдпреЗ рдореИрдЬрд┐рдХ рдСрдкрд░реЗрдЯрд░ рдЖрдкрдХреЛ рдПрдХ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреЙрдЗрдВрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдРрд╕реЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИ, рд╡рд╣ рд╡рд░реНрдЧ рдЬрд┐рд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ, рд╕рднреА рддрд░реНрдХреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред

рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдХрд╛рд░ рд╣реИрдВред рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ, рддреЛ рдЖрдк рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╢реВрдиреНрдп (MyClass :: *) (int) рдХреЙрдиреНрд╕реНрдЯреЗрдВрд╕ рдЯреВ void (MyClass :: *) (int) рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ (рдЖрдк рдЗрд╕реЗ reinterpret_cast рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ (рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛) ) рдпрджрд┐ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ)ред

рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗрд╡рд▓ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдирд╣реАрдВ рд╣реИрдВред рдПрдХ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░ рдХреЗрд╡рд▓ рдЙрд╕ рдкрддреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ рдЬрд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рд╕реНрдерд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рднреА, рдпрджрд┐ рдпрд╣ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ, рддреЛ рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВред рдПрдХ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЖрдХрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднреА рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдкреНрд░рдХрд╛рд░ рд▓рдХреНрд╖рдг рд╡рд░реНрдЧ: QtPStreet :: FunctionPointer

рдореБрдЭреЗ рдЖрдкрдХреЛ QtPStreet :: FunctionPointer рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╡рд░реНрдЧ рд╕реЗ рдорд┐рд▓рд╡рд╛рддреЗ рд╣реИрдВред рд╕рдВрдкрддреНрддрд┐ рд╡рд░реНрдЧ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред Qt рдореЗрдВ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг QTypeInfo рд╣реИ ред рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рд╣рдореЗрдВ рдЬреЛ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдЯреЗрдореНрдкрд▓реЗрдЯ <рдЯрд╛рдЗрдкрдиреЗрдо рдЯреА> рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдлрдВрдХреНрд╢рдирдкреЙрдЗрдВрдЯ рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЧрд╛:

Qt рдЕрднреА рднреА C ++ 98 рд╕рдВрдХрд▓рдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рдЪрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╡реИрд░рд┐рдПрдб рдЯреЗрдореНрдкрд▓реЗрдЯ)ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреБрдгреЛрдВ рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд╣реИрдВ: рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реВрдЪрдХ, рдПрдХ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ, рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рдирд▓рд░реНрд╕ред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЫрд╣ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рднреА рд╣реИ рдЬреЛ рдПрдХ рддрд░реНрдХрдкреВрд░реНрдг рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдПрдХ рдордирдорд╛рдиреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдХреА, рдпрджрд┐ рд╕рдВрдХрд▓рдХ рддрд░реНрдХреЛрдВ рдХреА рдПрдХ рдЪрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред FunctionPointer рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди qobjectdefs_impl.h рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред

QObject :: рдХрдиреЗрдХреНрдЯ

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ред рдпрд╣рд╛рдБ qobject.h рд╕реЗ рдкрд╣рд▓реЗ рдирдП рдЕрдзрд┐рднрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ:

 template <typename Func1, typename Func2> static inline QMetaObject::Connection connect( const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer<Func2>::Object *receiver, Func2 slot, Qt::ConnectionType type = Qt::AutoConnection) { typedef QtPrivate::FunctionPointer<Func1> SignalType; typedef QtPrivate::FunctionPointer<Func2> SlotType; //   ,     Q_STATIC_ASSERT_X(int(SignalType::ArgumentCount) >= int(SlotType::ArgumentCount), ""The slot requires more arguments than the signal provides.""); Q_STATIC_ASSERT_X((QtPrivate::CheckCompatibleArguments<typename SignalType::Arguments, typename SlotType::Arguments>::value), ""Signal and slot arguments are not compatible.""); Q_STATIC_ASSERT_X((QtPrivate::AreArgumentsCompatible<typename SlotType::ReturnType, typename SignalType::ReturnType>::value), ""Return type of the slot is not compatible with the return type of the signal.""); const int *types; /* ...   ,   QueuedConnection ...*/ QtPrivate::QSlotObjectBase *slotObj = new QtPrivate::QSlotObject<Func2, typename QtPrivate::List_Left<typename SignalType::Arguments, SlotType::ArgumentCount>::Value, typename SignalType::ReturnType>(slot); return connectImpl(sender, reinterpret_cast<void **>(&signal), receiver, reinterpret_cast<void **>(&slot), slotObj, type, types, &SignalType::Object::staticMetaObject); } 


рдЖрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рджреЗрдЦрд╛ рдХрд┐ рдкреНрд░реЗрд╖рдХ рдФрд░ рд░рд┐рд╕реАрд╡рд░ рдХреЗрд╡рд▓ QObject * рдирд╣реАрдВ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрдВрдХреНрд╢рдирдкрд╛рдЗрдВрдЯрд░ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░реНрд╕ рд╣реИрдВ :: рдСрдмреНрдЬреЗрдХреНрдЯред рдПрдХ рдЕрдзрд┐рднрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреЗрд╡рд▓ рд╕рджрд╕реНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рд╢рд╛рдорд┐рд▓ рд╣реИ, SFINAE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрддрд╛ рд╣реИ рдХреЗрд╡рд▓ рдпрджрд┐ рдкреНрд░рдХрд╛рд░ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рд╣реИред

рдлрд┐рд░ рд╣рдо Q_STATIC_ASSERT рдХреЗ рдПрдХ рд╕рдореВрд╣ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдИ рдЧрд▓рддреА рдХрд░рддрд╛ рд╣реИ рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рд░реНрдердХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдХреБрдЫ рдЧрд▓рдд рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╣ рдпрд╣рд╛рдВ рддреНрд░реБрдЯрд┐ рджреЗрдЦрддрд╛ рд╣реИ, рди рдХрд┐ _impl.h рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рдиреВрдбрд▓реНрд╕ рдореЗрдВред рд╣рдо рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫрд┐рдкрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЛ рдХрднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдореЗрдВ рдПрдХ рдЕрд╕рдВрдЧрдд рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЕрдЧрд▓рд╛, рд╣рдо QSlotObject рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ connectImpl () рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред QSlotObject рд╕реНрд▓реЙрдЯ рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реИ рдЬреЛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рд╡рд╣ рд╕рдВрдХреЗрдд рддрд░реНрдХреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рднреА рдЬрд╛рдирддреА рд╣реИ рдФрд░ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░ рд╕рдХрддреА рд╣реИред рд╣рдо List_Left рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕реНрд▓реЙрдЯ рдореЗрдВ рдЙрддрдиреЗ рд╣реА рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдПрдХ рд╕реНрд▓реЙрдЯ рд╕реЗ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВред

QObject :: connectImpl рдПрдХ рдирд┐рдЬреА рдЖрдВрддрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛ред рдЗрд╕рдореЗрдВ рдореВрд▓ рдХреЗ рд╕рдорд╛рди рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рдХрд┐ рдХреНрдпреВрдУрдмрдЬреЗрдХреНрдЯрдкрд╛рдЗрдВрдЯ :: рдХрдиреЗрдХреНрд╢рди рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╡рд┐рдзрд┐ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдХреНрдпреВрдПрд╕рд▓реЙрдЯрдмрдЬреЗрдХреНрдЯрдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВред

рдпрджрд┐ рд╣рдо рд╢реВрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдФрд░ рд╕реНрд▓реЙрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдпрджрд┐ рдкреНрд░рдХрд╛рд░ Qt :: UniqueConnection рд╣реИред рд╣рдо рд╢реВрдиреНрдп рдФрд░ ** рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдкреЙрдЗрдВрдЯрд░ рд╕реЗ рдореЗрдореНрдмрд░ рдлрдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ рд╣реИред

рд╕рдВрдХреЗрдд рд╕реВрдЪрдХрд╛рдВрдХ

рд╣рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рдкреЙрдЗрдВрдЯрд░ рдФрд░ рд╕рд┐рдЧреНрдирд▓ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП MOC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЕрднреА рднреА рдПрдордУрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ :-)ред MOC qt_static_metacall рдореЗрдВ рдХреЛрдб рдЬрдирд░реЗрдЯ рдХрд░реЗрдЧрд╛, рдЬреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд╣реА рдЗрдВрдбреЗрдХреНрд╕ рджреЗрддрд╛ рд╣реИред ConnectImpl рдПрдХ рд╕реВрдЪрдХ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд╕рд╛рде qt_static_metacall рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред

 void Counter::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { /* ....  ....*/ } else if (_c == QMetaObject::IndexOfMethod) { int *result = reinterpret_cast<int *>(_a[0]); void **func = reinterpret_cast<void **>(_a[1]); { typedef void (Counter::*_t)(int ); if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&Counter::valueChanged)) { *result = 0; } } { typedef QString (Counter::*_t)(const QString & ); if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&Counter::someOtherSignal)) { *result = 1; } } { typedef void (Counter::*_t)(); if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&Counter::anotherSignal)) { *result = 2; } } } } 

рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд┐рдЧреНрдирд▓ рдЗрдВрдбреЗрдХреНрд╕ рд╣реИ, рддреЛ рд╣рдо рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

QSlotObjectBase

QSlotObjectBase ConnectImpl рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рд╕реНрд▓реЙрдЯ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдХреЛрдб рджрд┐рдЦрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣рд╛рдБ QObject :: QSlotObjectBase рд╣реИ, рдЬреЛ Qt5 рдЕрд▓реНрдлрд╛ рдореЗрдВ рдерд╛:

 struct QSlotObjectBase { QAtomicInt ref; QSlotObjectBase() : ref(1) {} virtual ~QSlotObjectBase(); virtual void call(QObject *receiver, void **a) = 0; virtual bool compare(void **) { return false; } }; 

рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬрд┐рд╕реЗ рдХреЙрд▓рд┐рдВрдЧ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдХреЙрд▓рд┐рдВрдЧ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреНрд▓рд╛рд╕реЗрд╕ QSlotObject, QStaticSlotObject рдпрд╛ QFunctorSlotObject рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдирдХрд▓реА рд╡рд░реНрдЪреБрдЕрд▓ рдЯреЗрдмрд▓

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдРрд╕реА рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рддреБрд░рдВрдд рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдЯреЗрдмрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рди рдХреЗрд╡рд▓ рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реЛрдЧрд╛, рдмрд▓реНрдХрд┐ рдмрд╣реБрдд рд╕реА рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рднреА рд╣реЛрдЧреА рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ RTTI ред рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдФрд░ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдкреНрд░рд╕рд╛рд░ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рдорд┐рд▓реЗрдЧрд╛ред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, QSlotObjectBase рдХреЛ рдкреЙрд▓рд┐рдореЙрд░реНрдлрд┐рдХ рдХреНрд▓рд╛рд╕ рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрднрд╛рд╕реА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдиреБрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 class QSlotObjectBase { QAtomicInt m_ref; typedef void (*ImplFn)(int which, QSlotObjectBase* this_, QObject *receiver, void **args, bool *ret); const ImplFn m_impl; protected: enum Operation { Destroy, Call, Compare }; public: explicit QSlotObjectBase(ImplFn fn) : m_ref(1), m_impl(fn) {} inline int ref() Q_DECL_NOTHROW { return m_ref.ref(); } inline void destroyIfLastRef() Q_DECL_NOTHROW { if (!m_ref.deref()) m_impl(Destroy, this, 0, 0, 0); } inline bool compare(void **a) { bool ret; m_impl(Compare, this, 0, a, &ret); return ret; } inline void call(QObject *r, void **a) { m_impl(Call, this, r, a, 0); } }; 

m_impl рдПрдХ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░ рд╣реИ рдЬреЛ рддреАрди рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдкрд┐рдЫрд▓реЗ рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рди рдереЗред рдмрд╛рд░-рдмрд╛рд░ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рдХреЛрдб рдкрд░ рд▓реМрдЯрдиреЗ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рднреА рдЖрднрд╛рд╕реА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдкрдврд╝рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓рдЧрднрдЧ рд╣рд░ рдХрдиреЗрдХреНрдЯ рдХреЙрд▓ рдПрдХ рдирдпрд╛ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ (QSlotObject рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдЬрд┐рд╕рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдЬреЛ рд╕рд┐рдЧреНрдирд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдФрд░ рд╕реНрд▓реЙрдЯ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ)ред

рд╕рдВрд░рдХреНрд╖рд┐рдд, рдЦреБрд▓рд╛ рдФрд░ рдмрдВрдж рд╕рдВрдХреЗрдд

рд╕рдВрдХреЗрдд Qt4 рдФрд░ рдкрд╣рд▓реЗ рдореЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рдереЗред рдпрд╣ рдПрдХ рдбрд┐рдЬрд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдерд╛ рдХрд┐ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдЙрд╕рдХрд╛ рд░рд╛рдЬреНрдп рдмрджрд▓рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд╕рд┐рдЧреНрдирд▓ рдХреЙрд▓ рдХрд░рдирд╛ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдерд╛ред рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд┐рдЧреНрдирд▓ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рд▓реЗрдЦрди рдФрд░ рдХрд╛рдЙрдВрдЯрд░ :: valueChanged рд╕рдВрдХрд▓рд┐рдд рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдпрджрд┐ рд╕рдВрдХреЗрдд рдЦреБрд▓рд╛ рдирд╣реАрдВ рдерд╛ред

Qt5 рдореЗрдВ, рд╣рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рд╣рдордиреЗ emit рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЯреНрд░рд┐рдХ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖ рдЕрд░реНрде рд▓реМрдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдЖрдпрд╛ред рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд╛рдн рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рджреВрд░ рдХрд░реЗрдВрдЧреЗ рдЬрдм рд╕рд┐рдЧреНрдирд▓ рдЕрдм рдЦреБрд▓реЗ рд╣реИрдВред

рдХрднреА-рдХрднреА рд╕рд┐рдЧреНрдирд▓ рдмрдВрдж рд╣реЛрдирд╛ рднреА рдЙрдЪрд┐рдд рд╣реИред рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, QAbstractItemModel рдореЗрдВ, рдЬрд╣рд╛рдВ рдЕрдиреНрдпрдерд╛, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдПрдХ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╕рдВрдХреЗрдд рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдПрдкреАрдЖрдИ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд┐рд╕рд╕реЗ рд╕рд┐рдЧреНрдирд▓ рдмрдВрдж рд╣реЛ рдЧрдП, рд▓реЗрдХрд┐рди рдирдП рдХрдиреЗрдХреНрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ред

рдПрдХ рдирдпрд╛ рд╣реИрдХ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред QPStreetSignal рдПрдХ рдЦрд╛рд▓реА рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬрд┐рд╕реЗ Q_OBJECT рдореИрдХреНрд░реЛ рдореЗрдВ рдмрдВрдж рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдмрдВрдж рд╣реИ, рдХреЗрд╡рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдмрдирд╛рддреЗ рд╕рдордп MOC рдЕрдВрддрд┐рдо QPStreetSignal рддрд░реНрдХ рдХреА рдЕрдирджреЗрдЦреА рдХрд░реЗрдЧрд╛ ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП qabbriditemmodel.h рджреЗрдЦреЗрдВред

рдЕрдзрд┐рдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб

рдмрд╛рдХреА рдХреЛрдб qobjectdefs_impl.h рдФрд░ qobject_impl.h рдореЗрдВ рд╣реИ ред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдмреЛрд░рд┐рдВрдЧ рдмреЙрдпрд▓рд░ рдХреЛрдб рд╣реИред рдореИрдВ рдЕрдм рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЬрд╛рдКрдВрдЧрд╛ рдЬреЛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред

рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реВрдЪреА

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдлрдВрдХреНрд╢рдирдкреЙрдЗрдВрдЯ :: рддрд░реНрдХ рддрд░реНрдХ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдХреЛрдб рдХреЛ рдЗрд╕ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рддрддреНрд╡ рджреНрд╡рд╛рд░рд╛ рдкреБрдирд░рд╛рд╡реГрддрд┐ рддрддреНрд╡, рдЗрд╕рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдорд┐рд▓рддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕ рддрддреНрд╡ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ QtPrivate :: рд╕реВрдЪреА рдХреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд╣рд╛рдпрдХ рдХрдХреНрд╖рд╛рдПрдВ QtPStreet :: List_Select рдФрд░ QtPStreet :: List_Left рд╣реИрдВ, рдЬреЛ рд╕реВрдЪреА рдореЗрдВ Nth рддрддреНрд╡ рдФрд░ рдкрд╣рд▓реЗ N рддрддреНрд╡реЛрдВ рд╡рд╛рд▓реА рд╕реВрдЪреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред

рд╕реВрдЪреА рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╣реИ рдЬреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рдЪрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рдЪрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде:

 template<typename... T> struct List; 

рддрд░реНрдХ рд╕реВрдЪреА рдмрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЫреБрдкрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд░реНрдХреЛрдВ рд╡рд╛рд▓реА рд╕реВрдЪреА (int, Qstring, QObject *) рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧреА:

 List<int, QString, QObject *> 

рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рдЪрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдмрд┐рдирд╛, рдпрд╣ LISP рд╢реИрд▓реА рдореЗрдВ рджрд┐рдЦреЗрдЧрд╛:

 template<typename Head, typename Tail > struct List; 

рдЬрд╣рд╛рдВ рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рдХреЗ рд▓рд┐рдП рдЯреЗрд▓ рдХреЛрдИ рдЕрдиреНрдп рд╕реВрдЪреА рдпрд╛ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд┐рдЫрд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 List<int, List<QString, List<QObject *, void>>> 

ApplyReturnValue рдЯреНрд░рд┐рдХ

FunctionPointer :: рдХреЙрд▓ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╕реНрд▓реЙрдЯ рдХрд╛ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП args [0] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрдХреЗрдд рдПрдХ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрдХреЗрдд рдХреЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ 0. рдпрджрд┐ рд╕реНрд▓реЙрдЯ рдПрдХ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ arg [0] рдкрд░ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдпрд╣ рд╢реВрдиреНрдп рд╣реИ, рддреЛ рд╣рдо рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЧрд▓рдд рд╣реИ рдЬреЛ рд╢реВрдиреНрдп рджреЗрддрд╛ рд╣реИред рдХреНрдпрд╛ рдореБрдЭреЗ рднрд╛рд░реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдирд╛ рд╣реИ: рдПрдХ рдмрд╛рд░ рд╢реВрдиреНрдп рдХреЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдФрд░ рджреВрд╕рд░рд╛ рд╢реВрдиреНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП? рдирд╣реАрдВ, рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

C ++ рдореЗрдВ, рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 functionThatReturnsVoid(), somethingElse(); 

рдЖрдк рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреЗ рд╕рд╛рде рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕рдм рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЗрд╕реЗ рд╢реВрдиреНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ:

 functionThatReturnsInt(), somethingElse(); 

рдпрд╣рд╛рдВ, рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╡рд╣ рдХрдерди рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рдЖрдк рдЕрдзрд┐рднрд╛рд░ рднреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рд╣рдо qobjectdefs_impl.h рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ :

 template <typename T> struct ApplyReturnValue { void *data; ApplyReturnValue(void *data_) : data(data_) {} }; template<typename T, typename U> void operator,(const T &value, const ApplyReturnValue<U> &container) { if (container.data) *reinterpret_cast<U*>(container.data) = value; } template<typename T> void operator,(T, const ApplyReturnValue<void> &) {} 

ApplyReturnValue рдХреЗрд╡рд▓ рд╢реВрдиреНрдп рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реИ *ред рдЕрдм, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рдВрдЫрд┐рдд рд╕рд╣рд╛рдпрдХ рдЗрдХрд╛рдИ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рджрд▓реАрд▓ рдХреЗ рдПрдХ рдлрд╝рдирдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдорд╛рдорд▓рд╛ рд╣реИ:

 static void call(Function &f, void *, void **arg) { f(), ApplyReturnValue<SignalReturnType>(arg[0]); } 

рдпрд╣ рдХреЛрдб рдЗрдирд▓рд╛рдЗрди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

Source: https://habr.com/ru/post/In215181/


All Articles