难以将不同种类的 Z3 expr 存储到地图中

Difficulty in Storing Different sorts of Z3 expr into a map

我创建了一个 std::map 的 z3::expr 和 int 对,想存储不同的表达式。然而,当我存储不同类型的表达式时,比如 首先是一个 64 位向量,然后是一个 32 位向量 ,编译器抛出一个 z3::exception 并抱怨 bvslt 的无效函数应用程序,在位置 2 的参数上排序不匹配,预期 (_ BitVec 64) 但给定 (_ BitVec 32)。如果我只用 64bitvec 或 32bitvec 存储 expr,它不会抱怨。不知道这个bvslt是怎么来存储两个独立的表达式的

所以我的问题是有什么方法可以将不同种类的 expr 存储到映射中?

当然可以存储不同种类的表达式。 根据您的描述,您 运行 进入了 C++ 重载 "experience"。 运算符 < 被重载为 exprs。相反,您想将表达式的比较用作抽象语法树。这些表达式公开了一个唯一标识符,它是一个无符号的。你想通过在这些身份上传递比较运算符来声明你的 std::map 模板。这通常通过声明辅助结构或 class 来完成。由于您已经在使用 C++,我想您知道如何执行此操作 :-)。