Recently I tend to group semantically related members into nested classes or structs. For instance imagine a class with concurrent access:
To avoid redundancy I don't name such nested structs. Why should I? C++ provides the feature of anonymous classes and structs and this technique is a good example why one would like to have it.class Foo { public: int getSomething() { Lock l(purpose.mutex); return purpose.something; } private: struct { Mutex mutex; int something; } purpose; };
But as often with C++ this language feature collides with others and makes it less usable. In this case you are getting problems when the grouped members need to be initialized. As a constructor must have the name of the class anonymous classes can not have constructors.
Orthogonality must definitly be a design goal for usable general purpose languages. And this property is greatly missing in C++ which is the matter for my blog entries.
No comments:
Post a Comment