Ok whenever I hear someone talk about variadic template and virtual function in one sentence. I am like : Oh probably we have a design issue here. Most designs either use static polymorphism (e.g. you really know the types you are going to support) or you use virtual functions + inheritance. So which of your categories are you in? Do you know all types you are going to support at compile time: then look for a template only solution. Otherwise look for an inheritance one.