我想知道某些模板元编程工具是否允许为不同类型分配唯一的整数标识符,例如:
class Type;
enum { id = identifier<Type>() /* or identifier<Type>::id, ... */ };
static_assert(id == identifier<Type>(), "...");
我认为,困难的部分是标识符应该在单个编译中保持相同(这不一定与编译单元相同)。但是,当然,因为我不知道这种技术或者它是否可能,我真的不知道最难的部分。
编辑:在单个编译单元中怎么样?
答案 0 :(得分:1)
您可以在运行时使用typeid
来创建具有虚函数的类。
其他类型缺少必要的表示和全局排序,编译器无法知道所有编译单元,并且链接器没有类型的概念。最常见的解决方法是使用 Boost.MPL 构建所有有趣类型的向量,并使用该向量中的索引作为标识符。
答案 1 :(得分:0)
了解Andrei Alescandrescu的Modern C ++ Design。他在关于抽象工厂的章节之一中非常深入地分析了这个问题,模板元编程涉及很多。结论是,如何将C ++类型映射到整数类型,没有绝对可移植的方法。