在类中声明类是有效的。(嵌套类)
在类中声明命名空间是无效的。
问题是:有什么好的理由(除了 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...
}
如果我使用一个类而不是命名空间,这会起作用,但是我被迫声明一个永远不会被实例化的类,它是一个相当命名空间。
为什么允许嵌套类并禁止在类中嵌套命名空间?这是遗留负担吗?
具有语义原因的答案不仅引用标准的一部分(尤其是语法部分)将被欣赏:)