On Friday, 28 February 2020 at 06:12:37 UTC, Виталий Фадеев wrote:
Searching solution for idea !

Goal is to get System message, dispatch/route to method !
If method implemented only !

I dream on in future write clean code of a derived widgets like this :

    class Base
    {
       // dispatch
       void On( message ... )
       {
           // call On<message>()
// example: call OnKeyUp() - if method OnKeyUp() is exists only
       }
    }

    class Derived : Base
    {
       // method implementation
       void OnKeyUp( ... )
       {
           //
       }
    }



I tryed code like this:

    import core.sys.windows.windows;
    import std.stdio;


    class Base
    {
       LRESULT On( UINT message, WPARAM wParam, LPARAM lParam )
       {
                switch ( message )
                {
                        case WM_KEYDOWN:
                                OnWM_KEYDOWN( wParam, lParam );
// <-- but it required declared OnWM_KEYDOWN(...) in base class Base. How will be without declaring in Base ?
                                break;

                        default:                                
                }
       }
    }


    class Button : Base
    {
        LRESULT OnWM_KEYDOWN( WPARAM wParam, LPARAM lParam )
        {
            writeln( "WM_KEYDOWN" );
        }
    }


May be other than derived ? May be templating ?
How to implement ?

Now I go in ths way:

    import std.stdio;
    import std.traits;


    class Base
    {
        void On( alias THIS )( int message )
        {
            static if (
                       __traits( hasMember, THIS, "OnKey" ) &&
isCallable!( __traits( getMember, THIS, "OnKey" ) )
                      )
            {
                __traits( getMember, THIS, "OnKey" )();
            }
        }

        void run( alias THIS )()
        {
            On!THIS( 1 );
        }
    }

    class A : Base
    {
        void OnKey()
        {
            writeln( "A.OnKey()" );
        }
    }


    void main()
    {
        auto a = new A();
        a.run!a();
    }


Searching for beauty readable code...

  • Call method if declare... Виталий Фадеев via Digitalmars-d-learn
    • Re: Call method i... Виталий Фадеев via Digitalmars-d-learn
    • Re: Call method i... Simen Kjærås via Digitalmars-d-learn
      • Re: Call meth... Виталий Фадеев via Digitalmars-d-learn
        • Re: Call ... drug via Digitalmars-d-learn
        • Re: Call ... Simen Kjærås via Digitalmars-d-learn
          • Re: C... Виталий Фадеев via Digitalmars-d-learn
            • ... Виталий Фадеев via Digitalmars-d-learn
              • ... Виталий Фадеев via Digitalmars-d-learn

Reply via email to