add template functor