27

我知道命名空间不能是模板参数。请参阅问题“专门用于命名空间的模板”

鉴于:

namespace A {
  class Foo;
  class Bar;
}

namespace B {
  class Foo;
  class Bar;
}

我想在命名空间上对一个类进行模板化,A或者B使以下工作:

template<name> class C {
  name::Foo* foo;
  name::Bar* bar;
};

我想知道为什么会这样。我知道模板不是结构,但编译器的设计是否存在技术限制?或者实现这个功能是否有一些重大的权衡?

4

2 回答 2

28

当 Bjarne Stroustrup 在 C++ 标准会议上第一次开始谈论模板时,他提到了命名空间作为模板参数。反应持怀疑态度,部分原因是名称空间本身太新了,我们害怕将两个我们不理解的东西结合起来。

于 2012-10-16T15:46:57.633 回答
15

这将是:

  1. (IMO) 不恰当:命名空间避免名称冲突。多态性超出了他们的章程。
  2. 不必要的:它不会实现任何结构已经无法完成的事情。
  3. 可能很困难:命名空间不是一个完整的、自包含的实体。命名空间的不同成员可以在不同的头文件甚至不同的编译单元中声明。
于 2012-10-16T00:42:17.523 回答