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