digitalmars.D - Abstract static methods
- Mike (53/53) Apr 27 2004 Hi all. I'm new to D and this is my first time posting here so please fo...
Hi all. I'm new to D and this is my first time posting here so please forgive me if this topic has been covered before. I looked this up in the D spec at the DigitalMars website and as far as I can tell it is not a feature of D so I thought I'd post my thoughts about it in the hopes that perhaps a future version of D can include it. I'm also very curious to read other programmers' opinions on the usefulness of this language feature and whether or not the same effect ado... I'm writing a UI library in C++ and want the various components/control TYPES to register themselves as part of a component set. Note that I want their types registered, not individual instances. So, to make registration a class-level operation I use a static method: class Component { public: static bool RegisterType(ComponentSet* compSet); static Component* Create(); }; The body should look something like this for each derived component: // class Button: public Component bool Button::RegisterType(ComponentSet* compSet) { compSet->Register("Button", &Create); } Button* Button::Create() { return new Button(); } // class TextBox: public Component bool TextBox::RegisterType(ComponentSet* compSet) { compSet->Register("TextBox", &Create); } TextBox* TextBox::Create() { return new TextBox(); } As you can see I want each class derived from Component to provide their own implementations of the static methods RegisterType and Create. The problem is that in C++ there is no way to FORCE programmers who derive from Component to re-write Component's static methods. That means that someone could derive a new component and forget to provide some vital functionality. What I would love to see in a language is a way to have a sort of "abstract static" method. Using C++ syntax it would look like this: class Component { public: static bool RegisterType(ComponentSet* compSet) = 0; static Component Create() = 0; }; The compiler would then require any derived classes to implement their own versions of the static methods. -Mike-
Apr 27 2004