说我有一个字符串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:谢谢大家,问题解决了:)
答案 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()
函数等等。但它不是免费软件。