00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef ParamToArgAdaptor_h_
00020 #define ParamToArgAdaptor_h_
00021
00022 #include <functional>
00023 #include "CLHEP/config/CLHEP.h"
00024 #include "CLHEP/config/iostream.h"
00025 #include <string>
00026 #include "CLHEP/GenericFunctions/Parameter.hh"
00027 #include "CLHEP/GenericFunctions/AbsFunction.hh"
00028
00029 namespace Genfun {
00030
00035 template <class F>
00036 class ParamToArgAdaptor : public AbsFunction {
00037
00038 FUNCTION_OBJECT_DEF(ParamToArgAdaptor)
00039
00040 public:
00041
00042
00043 typedef Parameter & (F::*ScopedMethodPtr) ();
00044
00045
00046 ParamToArgAdaptor(const F & function,
00047 ScopedMethodPtr parameterFetchMethod);
00048
00049
00050 ParamToArgAdaptor(const ParamToArgAdaptor &right);
00051
00052
00053 virtual ~ParamToArgAdaptor();
00054
00055
00056 virtual double operator ()(double argument) const;
00057 virtual double operator ()(const Argument & a) const;
00058
00059
00060 virtual unsigned int dimensionality() const;
00061
00062
00063 Parameter & scaleFactor();
00064 const Parameter & scaleFactor() const;
00065
00066
00067 private:
00068
00069
00070 const ParamToArgAdaptor & operator=(const ParamToArgAdaptor &right);
00071
00072
00073 Parameter _scaleFactor;
00074
00075
00076 F *_function;
00077
00078
00079 std::mem_fun_ref_t<Parameter &, F> _parameterFetchMethod;
00080
00081 };
00082 }
00083 #include "CLHEP/GenericFunctions/ParamToArgAdaptor.icc"
00084 #endif