CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ExpressionEvaluator.h
Go to the documentation of this file.
1 #ifndef CommonToolsUtilsExpressionEvaluator_H
2 #define CommonToolsUtilsExpressionEvaluator_H
3 
4 
5 #include<string>
6 
7 namespace reco {
8 
10 public:
11  ExpressionEvaluator(const char * pkg, const char * iname, const std::string & iexpr);
13 
14  template<typename EXPR, typename... CArgs>
15  EXPR * expr() const {
16  typedef EXPR * factoryP();
17  return reinterpret_cast<factoryP*>(m_expr)();
18  }
19 
20 private:
21 
23  void * m_expr;
24 };
25 
26 
27  template< typename EXPR>
28  EXPR * expressionEvaluator(const char * pkg, const char * iname, const std::string & iexpr) {
29  ExpressionEvaluator ee(pkg, iname,iexpr);
30  return ee.expr<EXPR>();
31  }
32 
33 }
34 
35 #define SINGLE_ARG(...) __VA_ARGS__
36 #define RECO_XSTR(...) RECO_STR(__VA_ARGS__)
37 #define RECO_STR(...) #__VA_ARGS__
38 #define reco_expressionEvaluator(pkg, EXPR, iexpr) reco::expressionEvaluator<EXPR>(pkg,RECO_XSTR(EXPR),iexpr)
39 
40 #endif // CommonToolsUtilsExpressionEvaluator_H
41 
EXPR * expressionEvaluator(const char *pkg, const char *iname, const std::string &iexpr)
ExpressionEvaluator(const char *pkg, const char *iname, const std::string &iexpr)