【发布时间】:2014-08-06 19:06:14
【问题描述】:
为什么下面的代码保证是唯一的typeID?!
using TypeId = uintptr_t;
template < typename T >
static TypeId GetTypeId()
{
static uint32_t placeHolder;
return (reinterpret_cast<TypeId>(&placeHolder));
}
我不明白为什么这不仅仅是一种随机内存位置作为一种“滥用”......提前感谢您的回答。
【问题讨论】:
-
编译器将为您调用它的每种类型实例化模板函数的副本,并且这些实例中的每一个都有自己唯一的
placeHolder,因此您会为每种类型获得不同的地址。 -
“我不明白为什么这不仅仅是一种随机内存位置” 可以这么说。但这没关系。它对每种类型都是独一无二且一致的。
-
所以我确实理解正确,它只是一个保证唯一的随机数......这样做有什么好处吗?不使用 RTTI 有什么好处吗?
-
I used this technique 早在那篇 CodeProject 文章之前,我不是第一个。
标签: c++ c++11 language-lawyer unique-id