クラス内でクラスを宣言することは有効です。(ネストされたクラス)
クラス内で名前空間を宣言することは無効です。
問題は、クラス内の名前空間の宣言を禁止する正当な理由 (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...
}
これは、名前空間の代わりにクラスを使用すると機能しますが、インスタンス化されないクラスを宣言することを余儀なくされます。これは完全な名前空間です。
入れ子になったクラスを許可し、クラス内で入れ子になった名前空間を禁止するのはなぜですか? それはレガシー負担ですか?
標準の一部(特に構文部分)を引用するだけではない意味論的な理由による回答は評価されます:)