表达式模板,添加变量和值

时间:2013-05-07 10:58:02

标签: c++ templates addition expression-templates

我有一个表达式模板,它在给定的表达式中添加一个带常量的变量。我想转换它以添加任何给定数字的变量。 常量和变量的结构:

struct Var {
  int operator () (int v) { return v; }
};

struct  Constant {
  int c;
 Constant (int d) : c (d) {}
  int operator () (int) { return c; }
};

这是表达式struct:

template < class L, class H, class OP >
struct DBinaryExpression {
    H h_;
  L l_;

  DBinaryExpression (L l, H h) : l_ (l), h_ (h) {}
  int operator () (int d) { return OP::apply (l_ (d), h_(d)); }
};

这是添加结构:

struct Add {
  static int apply (int l, int h) { return l + h; }
};

这是运营商模板:

template< class A, class B >
DExpression<DBinaryExpression<DExpression<A>, DExpression<B>, Add> >
operator + (DExpression<A> a, DExpression<B> b)
{
  typedef DBinaryExpression <DExpression<A>, DExpression<B>, Add> ExprT;
  return DExpression<ExprT>(ExprT(a,b));
}

这是头文件:

int main (void)
{
  typedef DExpression <Var> Variable;
  typedef DExpression <Constant> Literal;

  Variable x ((Var()));
  Literal l (Constant (50));

  int a=10;


 evaluate (a, x+l); 

 return 0;
}

这实际上不是我的代码,但我已经将所有基本的算术运算添加到代码中。

任何想法的家伙?我是 C ++ 模板的新手,我真的不太了解它。

0 个答案:

没有答案