我正在制作一个表达式类:
template<typename T, typename U>
class expression
{
public:
expression(T vala, U valb, oper o){val1 = vala; val2 = valb; op = o;}
operator bool{return(val1 op val2);}
private:
T val1;
U val2;
oper op;
};
如您所见,这有点伪代码,因为我需要一个运算符类。我最初的想法是创建一个包含所有可能运算符的数组,然后通过字符串将其转换,但这行不通,因为运算符的数量太多,以及如何将其转换为字符串,除非通过二维数组,其中 n[0][0] 具有第一个运算符,而 n[0][1] 具有该运算符字符串。
有人对向我的表达式类添加运算符值有任何建议吗?
最佳答案
c++表达式模板技术中使用了类似的方法。
您可以使用诸如 apply 或 evaluate 之类的方法将表达式创建为一个类。此方法接受参数并应用表达式。
看看表达式模板正在使用什么。 http://www.angelikalanger.com/Articles/Cuj/ExpressionTemplates/ExpressionTemplates.htm https://www.cct.lsu.edu/~hkaiser/spring_2012/files/ExpressionTemplates-ToddVeldhuizen.pdf
以您的情况为例:
struct isEqual
{
template <typename T, typename U>
bool operator()(T a, U b)
{
return a == b;
}
};
template <typename T, typename OP>
struct expression
{
T& a;
T& b;
OP& op;
expression(T a, T b, OP op) : a(a), b(b), op(op) {}
void eval() { op(a,b); }
};
int main()
{
expression<int, isEqual> exp(1,2,isEqual());
exp.eval();
}
关于c++ - 如何制作一个 "operator"变量? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/992034/