我知道名称空间不能是模板参数。请参阅问题"template specialized on a namespace":
假设:
namespace A { class Foo; class Bar; } namespace B { class Foo; class Bar; }
我想在命名空间
A
或B
上模拟一个类,以便以下工作:template<name> class C { name::Foo* foo; name::Bar* bar; };
我想知道为什么会这样。我知道模板不是结构,但编译器的设计是否存在技术限制?或者是否有一些重要的权衡来实现这个功能?
答案 0 :(得分:26)
当Bjarne Stroustrup第一次开始讨论C ++标准会议中的模板时,他提到了名称空间作为模板参数。反应是持怀疑态度的,部分原因是命名空间本身是如此新颖,我们害怕将两件我们不理解的事情结合起来。
答案 1 :(得分:16)
这将是: