13#ifndef ROOT_Math_ParamFunctor
14#define ROOT_Math_ParamFunctor
50 template <
class Obj,
typename MemFn>
53 return (
p->*
memFn)(
const_cast<T *
>(
x),
const_cast<double *
>(par));
69 template <
typename Func,
typename = std::enable_if_t<!std::is_same_v<std::decay_t<Func>, ParamFunctorTempl> &&
70 !std::is_same_v<std::decay_t<Func>, std::function<Signature>>>>
73 using F = std::decay_t<Func>;
74 if constexpr (std::is_constructible_v<std::function<Signature>, Func>) {
75 fFunc = std::function<Signature>{std::forward<Func>(
f)};
76 }
else if constexpr (std::is_pointer_v<F> && std::is_class_v<std::remove_pointer_t<F>>) {
77 fFunc = [
f](
const T *
x,
const double *
p) {
return (*
f)(
const_cast<T *
>(
x),
const_cast<double *
>(
p)); };
79 fFunc = [
f = std::forward<Func>(
f)](
const T *
x,
const double *
p)
mutable {
80 return f(
const_cast<T *
>(
x),
const_cast<double *
>(
p));
90 bool Empty()
const {
return !fFunc; }
Basic types used by ROOT and required by TInterpreter.
winID h TVirtualViewer3D TVirtualGLPainter p
Param Functor class for Multidimensional functions.
ParamFunctorTempl()=default
ParamFunctorTempl(Obj *p, MemFn memFn)
Construct from a pointer to a class object and a pointer to one of its member functions,...
T operator()(const T *x, const double *p) const
T(const T *, const double *) Signature
The signature every wrapped callable is normalized to.
std::function< Signature > fFunc
ParamFunctorTempl(Func &&f)
Construct from any callable object, or from a pointer to one.
ParamFunctorTempl(std::function< Signature > f)
Implicit conversion, relied on by the Python interface when passing a callable to TF1.
Namespace for new Math classes and functions.