template classes need to be implemented in header files