use template ingeritance