在类内部声明一个命名空间是无效的。
问题是:除了C++的语法问题之外,是否有任何好的理由禁止在类内部声明命名空间?
关于为什么我想要这样做,这里有一个例子:
让我们来看一个二叉树容器的基本声明。
template<typename Data>
class binary_tree
{
public:
... stuff ....
private:
... iterators class declaration ...
public:
typedef left_depth_iterator_impl left_depth_iterator;
typedef right_depth_iterator_impl right_depth_iterator;
typedef left_breadth_iterator_impl left_breadth_iterator;
typedef right_breadth_iterator_impl right_breadth_iterator;
... stuff ....
private:
Data data;
binary_tree* left;
binary_tree* right;
};
现在我注意到我的类中有很多迭代器,所以我想将它们重新分组到同一个命名空间中,就像这样:
template<typename Data>
class binary_tree
{
public:
... stuff ....
private:
... iterators class declaration ...
public:
namespace iterator
{
typedef left_depth_iterator_impl left_depth;
typedef right_depth_iterator_impl right_depth;
typedef left_breadth_iterator_impl left_breadth;
typedef right_breadth_iterator_impl right_breadth;
}
... stuff ....
private:
Data data;
binary_tree* left;
binary_tree* right;
};
这将允许简单使用:
void function()
{
binary_tree::iterator::left_depth it;
...stuff...
}
这在我使用类而不是命名空间时有效,但我被迫声明一个永远不会被实例化的类,这实际上是一个命名空间。
为什么允许在类中嵌套类,却禁止在类中嵌套命名空间?这是一个遗留的负担吗?
希望能给出有语义理由的答案,不仅仅引用标准的一部分(尤其是语法部分)。谢谢 :)