Covariant callback functions, or assigning base class members through a subclass reference

Jacob Carlborg via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Jul 14 23:22:04 PDT 2015


On 2015-07-14 17:28, Rene Zwanenburg wrote:
> Given the following code:
>
> class Base
> {
>      alias CallbackType = void delegate(Base);
>
>      CallbackType callback;
>
>      void foo()
>      {
>          callback(this);
>      }
> }
>
> class Derived : Base
> {
>
> }
>
> void main()
> {
>      auto d = new Derived();
>      d.callback = (Derived d) { /* Do something */ }
> }
>
> Obviously this won't compile, since the callback function needs to have
> Base as parameter, not Derived.

You can cast the delegate. It's probably unsafe but a simple example works.

-- 
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list