Czy istnieje taki mechanizm, który pozwala zinterpretować niepusty typ string lub tablicę char jako fragment kodu? Nie wiem, czy dobrze ująłem pytanie, dlatego spróbuję przedstawić problem na przykładzie.
Rozważmy poniższy kod:
#include <iostream>
using namespace std;
int main()
{
string x="36+4-5/5";
cout<<x<<endl;
}
Wówczas
cout<<x<<endl;
działa tak samo jak
cout<<"36+4-5/5"<<endl;
Na ekran zostanie zwrócony 36+4-5/5.
Chodzi mi o to, żeby zamiast tego, co jest wyżej, było tak (bez cudzysłowów):
cout<<36+4-5/5<<endl;
Co powinno zwrócić na ekran 39. Wykonane zostało działanie matematyczne.
Dochodząc do sedna:
#include <iostream>
using namespace std;
int main()
{
string x="36+4-5/5";
cout<<funkcja_przekształcająca_string_na_fragment_kodu(x)<<endl;
}
Ma zwrócić 39
Czyli:
cout<<funkcja_przekształcająca_string_na_fragment_kodu(x)<<endl;
Ma działać jak (bez cudzysłowów):
cout<<36+4-5/5<<endl;
Więc:
Żadna ze znanych mi funkcji konwertujących (istringstream, strtol, atoi, sscanf) nie działa prawidłowo dla rozbudowanych formuł. Jednakże nie chodzi tylko o interpretację samych liczb i operatorów, bowiem chcę, aby to również działało dla zmiennych czy poza otoczeniem cout działały fragmenty kodu, które zawierają, np. instrukcję warunkową. Przykładowo:
#include <iostream>
using namespace std;
int main()
{
int a=2, b=3;
string x="3*a+4+b-15/(b*5)";
cout<<funkcja_przekształcająca_string_na_fragment_kodu(x)<<endl;
}
I to zwróci 12, nie 3*a+4+b-15/(b*5).
Lub:
#include <iostream>
using namespace std;
int main()
{
int a=2;
string x="if(a>3) cout<<0; else cout<<1;";
funkcja_przekształcająca_string_na_fragment_kodu(x);
}
Zwróci 1.