The process of a certain operation is actually executed by calling KernelFunction.callxxx.  Take callUnboxedOnly for example, the sentence that invokes the operation is:
      return (*func)(getFunctor_(), std::forward<Args>(args)...);

The func is wrap_kernel_functor_unboxed_::call, getFunctor_() returns the functor that executes the real operations (e.g. lstm cell).
I am wondering why the functor has to  be wrapped by another static function (wrap_kernel_functor_unboxed_::call)? How if we move the codes in wrap_kernel_functor_unboxed_::call into KernelFunction.callUnboxedOnly so we can execute the functor directly? Why we need a functor_ then unboxed_kernel_func_ in KernelFunction?
Thank you very much!