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

时间:2015-05-20 23:58:17

标签: z3

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

所以我的问题是,有什么办法可以将不同种类的expr存储到地图中吗?

1 个答案:

答案 0 :(得分:2)

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