我正在尝试创建一个映射,该映射与具有随机整数值的表达式变量和表达式常量相对应。
这是表达式:((x || !z) && (y || !z))
,其中x y和z是bool_const
表达式。
我创建了一个递归函数,它能够遍历表达式中的每个元素。但是在映射函数中,我必须提供一个INTEGER和一个STRING作为输入。
map<int,string> symbols;
void walk(expr e)
{
if(e.is_const())
{
std::cout <<"ARGUMENT: " << e<< endl;
int ran_num = (rand() % 10) + 1;
symbols.insert(pair<int,string>(ran_num,e.to_string));
}
else
{
cout <<"APP: " << e.decl().name() << endl;
for(int i = 0; i < e.num_args(); i++)
{ int ran_num = (rand() % 10) + 1;
symbols.insert(pair<int,string>(ran_num,e.decl().name()));
walk(e.arg(i));
}
}
}
问题出在
symbols.insert(pair<int,string>(ran_num,e.to_string)
其中e.to_string
不能解释为字符串
和
symbols.insert(pair<int,string>(ran_num,e.decl().name()))
也无法将e.decl().name()
部分解释为STRING。
如何将它们转换为字符串以满足我的映射功能?
答案 0 :(得分:0)
编译器告诉您,name
不是string
,而是symbol
,在这里定义:https://z3prover.github.io/api/html/classz3_1_1symbol.html
如果要将其转换为字符串,则确实提供了str
方法;因此您应该说类似e.decl().name().str()
之类的话。
但是在进入细节之前,您应该真正查看代表Z3表达式的类层次结构。从这里开始:https://z3prover.github.io/api/html/classz3_1_1expr.html