Declaring a class within a class is valid. (Nested classes)
Declaring a namespace within a class is invalid.
The question is: is there any good reason (other than c++ grammar/syntax problems) to forbid the declaration of a namespace within a class ?
As for why would i want to do that, here is an exemple :
Let's have a basic delcaration of a binary tree container
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;
};
Now i notice that there are a lot of iterators in my class, so i would like to regroup them within the same namespace like this :
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;
};
This would allow a simple usage :
void function()
{
binary_tree::iterator::left_depth it;
...stuff...
}
This works if i use a class instead of a namespace, but i am then forced to declare a class that will never be instantiated which is quite a namespace.
Why allow nested classes and forbid nested namespaces within classes ? is it a legacy burden ?
Answers with semantic reasons that do not only quote part of the standard(especially syntax parts) will be apreciated :)
See Question&Answers more detail:os