c++ - 如何制作一个 "operator"变量? (C++)

标签 c++ operators expression operator-keyword

我正在制作一个表达式类:

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/

相关文章:

c++ - 为 matlab R2011b 设置 c++ 编译器

c++ - 更正我的次优二进制搜索

c++ - 为整数类型重载运算符 ^

python - Pandas 中 DataFrame 列表的按行映射

c++ - 来自两个以上字符串的最长公共(public)子字符串 - C++

swift - 是否可以重载 "?"运算符?

jdbc - 使用Mule表达式获取消息有效负载属性

c# - 为什么我的局部变量可能为空,即使该方法返回非空?

java - 在java上使用正则表达式检索字符串

c++ - 此套接字选择代码有什么问题?