Add Stream as parameters.
Use a struct of signal & slots

It's more efficient and easier to use.

connect(apiA.signal, apiB.slot);
connect(apiA.signal, apiC.slot2);
signal(true, "foo"); //call slot & slot2
Fix macro error