C++ 图书馆要存储一个;方程式;涉及参考资料?

C++ 图书馆要存储一个;方程式;涉及参考资料?,c++,pass-by-reference,C++,Pass By Reference,所以我可以通过引用传递,并将该引用存储在一个结构或类中,如果我在其他地方进行更改,并在存储该引用的位置再次检查该引用,则更改将在那里,因为我只是在访问相同的内存 有没有一个图书馆可以让我这样做: int foo = 9; int bar = 5; // obviously other arithmetic would exist too, and could be combined Equation foo_minus_bar = Subtract(foo, bar); // output:

所以我可以通过引用传递,并将该引用存储在一个结构或类中,如果我在其他地方进行更改,并在存储该引用的位置再次检查该引用,则更改将在那里,因为我只是在访问相同的内存

有没有一个图书馆可以让我这样做:

int foo = 9;
int bar = 5;
// obviously other arithmetic would exist too, and could be combined
Equation foo_minus_bar = Subtract(foo, bar);

// output: 4
cout << foo_minus_bar << endl;

foo = 11;

// output: 6
cout << foo_minus_bar << endl;
// literal character for character output: foo - bar
cout << foo_minus_bar.formula() << endl;
intfoo=9;
int bar=5;
//显然,其他算法也会存在,并且可以结合使用
方程式foo_减去_bar=减去(foo,bar);
//产出:4

coutOP的问题让我想起了另一个答案,在这个答案中,我为一个带有仿函子类的小示例编译器建模了一个

在该项目中,AST表达式节点拥有其子(表达式)节点的所有权

我不确定我是否正确地理解了OP的意图,但是,当然,它也可以与不具有子(表达式)节点所有权的表达式节点一起设计

因此,我又举了一个(甚至更短)的例子。此外,我重载了
operator()()
(而不是
virtual
solve()
成员函数)。不过,在这种情况下,我认为这是一个味觉的问题。 示例代码:

#include <iostream>

struct Expr {
  virtual int operator()() const = 0;
};

struct ExprConst: Expr {
  const int value;
  ExprConst(int value): value(value) { }
  virtual int operator()() const { return value; }
};

struct ExprRef: Expr {
  const int &ref;
  ExprRef(const int &ref): ref(ref) { }
  virtual int operator()() const { return ref; }
};

struct ExprBin: Expr {
  const Expr &arg1, &arg2;
  ExprBin(const Expr &arg1, const Expr &arg2):
    arg1(arg1), arg2(arg2)
  { }
};

struct ExprSub: ExprBin {
  ExprSub(const Expr &arg1, const Expr &arg2):
    ExprBin(arg1, arg2)
  { }
  virtual int operator()() const { return arg1() - arg2(); }
};

int main()
{
  int foo = 9;
  int bar = 5;
  ExprRef exprFoo(foo), exprBar(bar);
  ExprSub exprSub(exprFoo, exprBar);
  std::cout << "foo - bar: " << exprSub() << '\n';
  std::cout << "foo = 7; bar = 10;\n";
  foo = 7; bar = 10;
  std::cout << "foo - bar: " << exprSub() << '\n';
  // done
  return 0;
}

类似于。。。哦您实际上是在尝试将值“绑定”到函数并为其创建引用。我会让一个更好的C++专家来回答这个问题。作为一个开始:似乎是一个解决方案,虽然结果可能会看起来比我希望的更“黑客”!我甚至会在lambdas上试用:)是的,这与我计划在没有现有库的情况下所做的类似,谢谢。@Shefeto肯定有一些库涵盖了这一点-我知道的大多数编译器都使用某种AST。其中最受欢迎的可能是与。另一方面,这样的库可能非常复杂,不太容易掌握。因此,另一种选择可能是只对满足您个人需求的内容进行建模。(顺便说一句,图书馆的问题在SO中实际上是离题的。);-)