Funktionszeiger austauschen



  • hi,

    ich hab ne klasse mit verschiedenen zeichenfunktionen die zwischen clipping und nicht clipping unterscheiden (DrawLineC bzw. DrawLineNC). der nutzer soll aber nur eine funktion DrawLine haben und mit einer funktion SetClipping() den clipping-modus ein-/ausschalten können. wie muss ich das DrawLine definieren, damit das so funktioniert?

    ich möchte aber keine funktion alla:

    void DrawLine(...)
    {
      if (Clipping)
        DrawLineC(...);
      else
        DrawLineNC(...);
    }
    

    sondern etwas in der art:

    class MyCanvas
    {
      private:
    
        void DrawLineC(int xa, int ya, int xe, int ye);
        void DrawLineNC(int xa, int ya, int xe, int ye);
    
      public:
    
        // funzt nicht
        void (*DrawLine) (int xa, int ya, int xe, int ye);
    
        // wenn clipping-mode gesetzt, soll die zeichenfunktion mit 
        // der clippingprozedur aufgerufen werden, ansonsten die andere
        void SetClipping(bool clip)
        { 
          DrawLine = clip ? DrawLineC : DrawLineNC;
        }
    };
    
    // anwemdung
    MyCanvas *MC = new MyCanvas;
    MC->SetClipping(true);
    MC->DrawLine(0, 0, 100, 100);  // intern aufruf von DrawLineC
    MC->SetClipping(false);
    MC->DrawLine(0, 0, 100, 100);  // intern aufruf von DrawLineNC
    


  • [cpp]class MyCanvas
    {
    private:
    void DrawLineC(int xa, int ya, int xe, int ye)
    {
    }
    void DrawLineNC(int xa, int ya, int xe, int ye)
    {
    }

    *void (MyCanvas::drawLinePointer) (int xa, int ya, int xe, int ye);
    public:

    MyCanvas()
    {
    SetClipping(false);
    }

    void DrawLine(int xa, int ya, int xe, int ye)
    {
    *(this->drawLinePointer)(xa, ya, xe, ye);
    }

    void SetClipping(bool clip)
    {
    drawLinePointer = clip ? &MyCanvas::DrawLineC : &MyCanvas::DrawLineNC;
    }
    };[/cpp]



  • thanx


Log in to reply