CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Sin.h
Go to the documentation of this file.
1 #ifndef PhysicsTools_Utilities_Sin_h
2 #define PhysicsTools_Utilities_Sin_h
3 
4 #include <cmath>
5 
6 namespace funct {
7 
8  template<typename T>
9  struct SinStruct {
10  SinStruct(const T& t) : _(t) { }
11  inline double operator()() const { return ::sin(_()); }
12  T _;
13  };
14 
15  template<typename T>
16  struct Sin {
17  typedef SinStruct<T> type;
18  inline static type compose(const T& t) { return type(t); }
19  };
20 
21  template<typename T>
22  inline typename Sin<T>::type sin(const T & t) { return Sin<T>::compose(t); }
23 
24 }
25 
26 #endif
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
SinStruct< T > type
Definition: Sin.h:17
double operator()() const
Definition: Sin.h:11
static type compose(const T &t)
Definition: Sin.h:18
Definition: Sin.h:16
long double T
SinStruct(const T &t)
Definition: Sin.h:10