3

C++ 中是否有足够的方法从 std::any 存储的数据中提取哈希?好吧,或者至少是字节列表形式的对象及其长度

4

1 回答 1

5

std::any是一种类型安全的机制,用于通过不需要知道该类型是什么的中介将已知类型的对象从一个位置传递到另一个位置。从中计算哈希不是它的目标。any事实上,如果不损害's 的功能,这将是不可能的。

散列一个对象需要一些关于该对象是什么以及正在做什么的知识。假设您可以只查看对象表示的字节,从而从中计算出有意义的散列,结果不会很好。它可能看起来工作......一段时间。但最终,它会做错事。

您可以创建一个类似于any需要对象实现散列的类型擦除类型。但std::any不是那种类型,因为任何不想散列他们放入的类型的any人都无法将所述对象存储在any.

这是因为any提供的任何操作都是存储到其中的所有类型也必须any提供的操作。例如,是可复制的,因此不能存储仅移动类型。对于那些想要这样做的人来说,这是一个烦恼,并且您转储的功能越多,类型存储“任何”事物的能力就越有限。anyany any

于 2021-04-06T16:06:47.637 回答