Suggestion: a shortcut for calling the base member function with unchanged parameters

Kristian kjkilpi at gmail.com
Fri Aug 25 04:49:58 PDT 2006


Actually there is redundancy in "super.f($)" also. That is the function  
name.

For all functions you could write "super($)" (or something) to call the  
base function.

class Derived : Base {
      this() {
          super($);
          m_val = 10;
      }
      this(int val) {
          super($);
          m_val = val;
      }

      void f(int index, float val1, float val2, bool isScalingUsed) {
          //do something
          ...

          super($);
      }

      int func(int x, int y, int length) {
          //do something
          ...

          return super($);
      }
}

I'm not sure that I like "$" in "super($)". Plain "super()" would be nice,  
but you cannot use it inside constructors (it calls "super.this()"). (Hmm,  
maybe "super(!)"...)


On Mon, 21 Aug 2006 20:41:23 +0300, Kristian <kjkilpi at gmail.com> wrote:
> Let we have the following two classes:
>
> class Base {
>      void f(int index, float val1, float val2, bool isScalingUsed) {...}
> }
>
> class Derived : Base {
>      void f(int index, float val1, float val2, bool isScalingUsed) {
>          //do something
>          ...
>
>          super.f(index, val1, val2, isScalingUsed);
>      }
> }
>
> At the end of 'Derived.f()' we call the corresponding function of the  
> base class without modifing any of the parameters. How many times you  
> have done it? I have done it quite many times.
>
> The parameter list of 'super.f()' is redundant code.
> You can make a typo or two when writing it. In addition, when the  
> parameter list of 'f()' is modified, or some of the paramters are  
> renamed, you have to change 'super.f(...)' also. It's tedious and you  
> can easily make an error, or you simply forget to do that.
>
> So, why not get rid of that redundant code?
>
> Let there be some kind of shortcut for it. For example:
>
>      super.f($);  //== 'super.f(index, val1, val2, isScalingUsed)'
>
> Naturally this kind of shortcutting should be possible with the  
> constructors also (i.e. "super($);").




More information about the Digitalmars-d mailing list