【发布时间】:2010-06-14 20:19:34
【问题描述】:
我希望我的类通过唯一的哈希码来识别每种类型。但是我不希望每次方法都生成这些哈希值,例如。 int GetHashCode(),在运行时调用。我想使用已经生成的常量,我希望有一种方法可以让编译器进行一些计算并设置这些常量。可以使用模板完成吗?如果可能的话,你能给我举个例子吗?
更新:
感谢kriss' 的评论,我意识到我的问题应该是这样的: 如何以尽可能低的运行时成本进行类型检查?
我想根据类类型检查指向对象的指针。只是我在我的库中实现的类,所以我在考虑一些自定义散列,因此是原始问题。我确实考虑过使用typeid,但我不知道使用它的运行时成本。我做了一个假设,因为 typeid 产生了一个 type_info 类,它比简单地比较唯一的 int 值更消耗。
【问题讨论】:
-
可能在预编译器中有一些东西,虽然没有关于预编译器哈希函数和/或随机的具体想法
-
你认为你为什么需要这样做?
-
如果您的 GetHashCode() 方法返回一个常量并被内联,它不会在运行时真正被调用,但肯定会被编译器内联。没有运行时成本。不要费心寻找复杂的解决方法,只要相信编译器......
-
在我的 Symbian 时代,我们曾经使用编译后构建工具将各种 ID 注入到 ROM 中;我们会喜欢预处理器可以完成的简单哈希系统,而不是尝试跟踪占位符并将它们外部化
-
你能显示你用来获取哈希码的界面吗? GetHashCode 是方法还是独立函数?您将已生成的常量保存在哪里 - 在类中或其他地方?
标签: c++ visual-studio-2008 visual-c++ compiler-construction