Hash Ada.Containers.Unfinite_哈希映射中类范围键的哈希

Hash Ada.Containers.Unfinite_哈希映射中类范围键的哈希,hash,hashmap,ada,indefinite,Hash,Hashmap,Ada,Indefinite,我在尝试创建一个不确定的散列映射时遇到了麻烦,因为我希望作为从抽象类继承的键特定对象,因此键类型是父类范围的,但我不知道如何处理容器所需的散列,因为散列类型是模块化类型。 如何处理类范围密钥的散列?首先想到的是向密钥类型抽象类添加一个“散列”基元函数,该函数将使用该具体类型的组件在每个具体派生密钥类型中实现,然后,为了使映射的哈希函数根据密钥的实际类型调用此原始哈希函数,并使用redispatch。好吧,抽象父级的所有子代都是公共的,它们不扩展父级记录,但我不知道此语言通常如何解决此问题。我的第

我在尝试创建一个不确定的散列映射时遇到了麻烦,因为我希望作为从抽象类继承的键特定对象,因此键类型是父类范围的,但我不知道如何处理容器所需的散列,因为散列类型是模块化类型。
如何处理类范围密钥的散列?

首先想到的是向密钥类型抽象类添加一个“散列”基元函数,该函数将使用该具体类型的组件在每个具体派生密钥类型中实现,然后,为了使映射的哈希函数根据密钥的实际类型调用此原始哈希函数,并使用redispatch。

好吧,抽象父级的所有子代都是公共的,它们不扩展父级记录,但我不知道此语言通常如何解决此问题。我的第一个想法是将不定散列映射所需的Key_类型存储为String,使用Ada提供的String散列,并存储子体提供的外部_标记,但是我想知道是否有更好的选择,因为我更喜欢使用我自己的散列,避免使用字符串类型。散列函数必须散列密钥@信天翁23,如果键是字符串,为什么不使用提供的哈希函数呢?可以使用Pearson字符串哈希函数()。这个散列到一个字节;如果这还不够,你可以把你的字符串分成几段,分别散列每一段,然后把散列组合成一个更大的值。为什么不使用标准函数Ada.Strings.hash呢?这应该可以完全移植到所有Ada编译器中。@NiklasHolsti上面的两条注释您可以看到我给Simon的答案,这是由于Ada提供的哈希函数使用了
固有的
子程序功能。我不喜欢依赖那些我听不清楚的东西,因为我对这门语言还不熟悉