moving on without shared pointers and templates

too much overhead