Checking out Andy Friesen's example, http://andy.tadan.us/d/listener.d. Mainly only did a bit renaming. Features: * Using the "struct in template" trick, signal templates with different number of template parameters can share the same name. * Template mixins are used to paste generic functionality in each template defining signals for a different number of parameters. * Signals can be connected to any member function or nested function, which then function as slots, by means of delegates. * Connections are unmanaged. You can break a connection, but you have to know the exact signal and exact delegate. * You can not find the object to which the "slot" belongs. Compile: dmd -c test.d dmd -c signal.d dmd -Lsignal.o test.d Run: ./test