【发布时间】:2009-09-11 07:56:07
【问题描述】:
核心问题: 我希望能够获取模板类的实例,例如:
template<class a, class b, class c> class foo;
foo<int, float, double>;
然后执行以下操作:
foo<int, float, double>::value; //Evaluates to a unique number
foo<long, float, double>::value; //Evaluates to a different unique number
foo<int, float, double>::value; //Evaulates to the same unique number
除了,真的,它是:
template<class a, class b, class c>
int getUniqueIdentifier()
{
return foo<a, b, c>::value;
}
当前的解决方案尝试:
我在想我想使用 Boost::MPL 的“可扩展关联序列”,因为每个元素都有自己的唯一标识符,但我认为我需要能够就地更改序列,而“插入”没有这样做.
我可能会叫错树。 (从好的方面来说,dayum,但是 MPL!)
目的:
在信号和套接字系统上重新发明轮子。组件使用“总机”创建和注册通道,该总机将使用唯一标识符将通道放入映射中,从而实现运行时的多功能性。我尝试以 Qt 库为例,但我无法解析它们的缩写,而且我认为我缺少一些正式的专业知识。
谢谢!
【问题讨论】:
-
这里的根本问题是模板可能在不同的翻译单元中被实例化。因此,不可能在编译时分配唯一的编号 - 两个 TU 可以在不同的计算机上同时编译!
-
哦,核心问题似乎不是核心问题 - 有一个潜在的目的实际上可以通过其他方式更好地解决。
标签: c++ templates metaprogramming