Use generic args for templates and pass them all in