缺少C ++ API的修改方法

时间:2013-04-17 10:20:26

标签: c++ z3

我想在z3 :: expr对象上进行一些转换。如何在C ++ API中使用Z3_substitute_varsZ3_translateZ3_substitute_?它们是用C#实现的,但我无法用C ++找到它们。很奇怪他们没有实施。

我尝试使用C api,但没有任何结果,这里有一个例子:

void substitute(){
z3::context c;
z3::expr a = c.int_const("a");
Z3_ast astA = a;
z3::expr plus = 2*a;
errs() << Z3_ast_to_string(c,plus);
z3::expr b = c.int_const("b");
Z3_ast astB = a;
z3::expr subs(c,Z3_substitute(c,plus,1,&astA,&astB));
errs() << Z3_ast_to_string(c,subs);
}

a没有被替换。我做错了吗?

2 个答案:

答案 0 :(得分:2)

感谢您指出这些功能不存在。 C ++包装器增加了C API之外的便利性 为这些API函数添加便利性是合理的 因为你表明你正在使用它们。

C ++包装器仍然可以与基本C API一起使用。 因此,您可以调用函数,例如Z3_translate和Z3_substitute 使用C ++ API时。许多其他API函数也没有 存在于C ++包装器中,但是包含现有函数的方式 应该很好地了解如何调用剩余的函数。

以下是一些相关帖子:

答案 1 :(得分:1)

我相信你的例子有一个拼写错误:

  Z3_ast astB = a;

尝试

  Z3_ast astB = b;