【发布时间】:2010-03-16 20:49:27
【问题描述】:
我有一个模板,它为它所实例化的每种类型创建一个唯一标识符。这是模板的简化版本:
template <typename T>
class arType {
static const arType Id; // this will be unique for every instantiation of arType<>.
}
// Address of Id is used for identification.
#define PA_TYPE_TAG(T) (&arType<T >::Id)
当您有一个纯粹由静态库组成的可执行文件时,这很有效。不幸的是,我们正在转向由 dll 组成的可执行文件。每个 dll 都可能有自己的类型的 Id 副本。
一个明显的解决方案是显式实例化 arType 的所有实例。不幸的是,这很麻烦,请问有没有人可以提出更好的解决方案?
【问题讨论】:
-
一个明显的问题是“你为什么认为你需要这样做?”
-
我希望能够在运行时存储一个唯一标识符并将其用于比较。我们使用它的一个地方是类型之间的转换表。
-
@Michael 我们中的许多人一直在管理我们所有职业的类型都没有唯一的 ID。你真的认为你有一些需要他们的独特问题吗?我并不是要无礼 - 我建议你问一个关于你的潜在问题的问题,而不是你认为的解决方案。
-
@Johannes:什么?另一个问题不涉及一致性问题。
标签: c++ metaprogramming