#include "signal.h" namespace { class Test { }; class A1 { }; class A2 { }; class A3 { }; SignalHandlerResult handler0(Test&) { return SIGNAL_CONTINUE_EMISSION; } typedef Function1 TestHandler0; int function0(Test&) { return 7; } typedef Function1 TestFunction0; SignalHandlerResult handler1(Test&, A1) { return SIGNAL_CONTINUE_EMISSION; } typedef Function2 TestHandler1; void function1(Test&, A1) { } typedef ReferenceCaller1 TestFunction1; SignalHandlerResult handler2(Test&, A1, A2) { return SIGNAL_CONTINUE_EMISSION; } typedef Function3 TestHandler2; void function2(Test&, A1, A2) { } typedef Function3 TestFunction2; SignalHandlerResult handler3(Test&, A1, A2, A3) { return SIGNAL_CONTINUE_EMISSION; } typedef Function4 TestHandler3; void function3(Test&, A1, A2, A3) { } typedef Function4 TestFunction3; void testSignals() { Test test; { Signal0 e0; Signal0::handler_id_type a = e0.connectLast(makeSignalHandler(TestHandler0(), test)); // signal handler from direct caller returning result Signal0::handler_id_type b = e0.connectFirst(makeSignalHandler(TestFunction0(), test)); // signal handler from direct caller returning int e0(); e0.disconnect(a); e0.disconnect(b); } { typedef Signal1 Signal1Test; Signal1Test e1; Signal1Test::handler_id_type a = e1.connectLast(makeSignalHandler1(TestHandler1(), test)); // signal handler from direct caller with one argument, returning result Signal1Test::handler_id_type b = e1.connectFirst(makeSignalHandler1(TestFunction1(test))); // signal handler from opaque caller with one argument, returning void e1(A1()); e1.disconnect(a); e1.disconnect(b); } { typedef Signal2 Signal2Test; Signal2Test e2; Signal2Test::handler_id_type a = e2.connectLast(makeSignalHandler2(TestHandler2(), test)); // signal handler from direct caller with two arguments, returning result Signal2Test::handler_id_type b = e2.connectLast(makeSignalHandler2(TestFunction2(), test)); // signal handler from direct caller with two arguments, returning void e2(A1(), A2()); e2.disconnect(a); e2.disconnect(b); } { typedef Signal3 Signal3Test; Signal3Test e3; Signal3Test::handler_id_type a = e3.connectLast(makeSignalHandler3(TestHandler3(), test)); // signal handler from direct caller with three arguments, returning result Signal3Test::handler_id_type b = e3.connectLast(makeSignalHandler3(TestFunction3(), test)); // signal handler from direct caller with three arguments, returning void e3(A1(), A2(), A3()); e3.disconnect(a); e3.disconnect(b); } } }