If you wanted to maintain C++03 compatibility, a dispatching macro might be useful to select the appropriate Signal template arity:
http://stackoverflow.com/questions/16683146/can-macros-be-ov...
template<class T1 = default_, class T2 = default ..., class T10 = default_> struct Signal;
where default is a placeholder type, and then have it dispatch internally to the correct Signal/N/ via template specialization.
The template specialization themselves were generated either via preprocessor metaprogramming or by an external tool.