无论如何将String转换为可执行的c ++表达式?

时间:2016-05-03 06:14:17

标签: javascript c++ c

说我有一个字符串var x = 2 + 3;我可以使用eval()将它转换为javasript中的表达式;有没有办法将字符串转换为可执行的c ++表达式与eval相同(使用内置函数或自定义代码)?我的意思是尝试找出一个变量线性方程的结果。我在c ++论坛

中找到了这段代码
#include <iostream>

struct VAR{
    float i;
};

struct LINE{//k*x+a
    float a, k;
    VAR* x;

    LINE(){}
    LINE(int a) : a(a), k(0), x(0) {}
    LINE(VAR& v) : a(0), k(1), x(&v) {}
};

LINE operator + (LINE A, LINE B){//assumes that A.x == 0 or B.x == 0 or A.x == B.x
    LINE R;
    R.a = A.a + B.a;
    R.k = A.k + B.k;
    if(A.x) R.x = A.x;
    else R.x = B.x;
    return R;
}

LINE operator - (LINE A, LINE B){//same as +
    LINE R;
    R.a = A.a - B.a;
    R.k = A.k - B.k;
    if(A.x) R.x = A.x;
    else R.x = B.x;
    return R;
}

LINE operator * (LINE A, LINE B){//assumes that A.x == 0 or B.x == 0
    LINE R;
    R.a = A.a * B.a;
    R.k = A.k * B.a + B.k * A.a;
    if(A.x) R.x = A.x;
    else R.x = B.x;
    return R;
}

LINE operator / (LINE A, LINE B){//assumes that B.x == 0
    LINE R;
    R.a = A.a / B.a;
    R.k = A.k / B.a;
    R.x = A.x;
    return R;
}

void operator == (LINE A, LINE B){
    LINE C = A - B;
    C.x->i = -C.a/C.k;
}

int main(){
    VAR x;
    5 == (2 + (x-7)*10)/2;

    std::cout << "x = " << x.i;
    std::cin.get();

    return 0;
}

它的工作正常。现在我要做的就是执行这个&#34; 5 ==(2 +(x-7)* 10)/ 2;&#34;语句为c ++中的eval。

编辑1:谢谢大家,问题解决了:)

1 个答案:

答案 0 :(得分:0)

唉,正如Joachim指出的那样,C ++是一种静态编译的语言,而不是像Java,Python这样的解释或动态编译语言。因此,标准C ++中没有这样的函数eval()

但是,您可能对Embedded Ch感兴趣,What's the best strategy to get rid of "warning C4267 possible loss of data"?是一个可嵌入的C ++解释器,提供此类eval()函数等等。但它不是免费软件。