Warum können wir keinen Namespace innerhalb einer Klasse deklarieren?
Die Deklaration einer Klasse innerhalb einer Klasse ist gültig. (Geschachtelte Klassen)
Das Deklarieren eines Namespaces innerhalb einer Klasse ist ungültig.
Die Frage ist: Gibt es einen guten Grund (abgesehen von C ++ - Grammatik- / Syntaxproblemen), die Deklaration eines Namespaces innerhalb einer Klasse zu verbieten?
Warum sollte ich das tun wollen, hier ist ein Beispiel:
Lassen Sie uns eine grundlegende Erklärung eines binären Baumcontainers geben
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;
};
Jetzt stelle ich fest, dass es in meiner Klasse viele Iteratoren gibt, daher möchte ich sie im gleichen Namespace wie folgt neu gruppieren:
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;
};
Dies würde eine einfache Verwendung ermöglichen:
void function()
{
binary_tree::iterator::left_depth it;
...stuff...
}
Dies funktioniert, wenn ich eine Klasse anstelle eines Namespaces verwende, dann aber gezwungen bin, eine Klasse zu deklarieren, die niemals instanziiert wird, was ein ziemlicher Namespace ist.
Warum verschachtelte Klassen zulassen und verschachtelte Namespaces innerhalb von Klassen verbieten? ist es eine Erblast?
Antworten mit semantischen Gründen, die nicht nur einen Teil des Standards (insbesondere Syntaxteile) zitieren, werden geschätzt :)