我有一个表达式模板,它在给定表达式中添加一个带有常量的变量。我想将其转换为添加具有任何给定数字的变量。常量和变量的结构:
struct Var {
int operator () (int v) { return v; }
};
struct Constant {
int c;
Constant (int d) : c (d) {}
int operator () (int) { return c; }
};
这是表达式结构:
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++模板的新手,我并没有真正了解它。