Generische Programmierung frühe Bindung



  • Ich habe eigentlich nur eine Frage. Ist es möglich, das man mittels Generischer Programmierung eine Funktion schreibt, deren Parameter sich erst zu Laufzeit bestimmen. Ich meine also die späte Bindung. Mir fällt leider dazu kein Beispiel ein und immer wenn ich denke eins gefunden zu haben muss ich nachher feststellen, das die Parameter doch wieder zur Compilierzeit festlagen. Also frühe Bindung.
    Wenn das in C++ geht, kann mir dann einer mal ein Beispiel zeigen?



  • #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    int i;
    
    int tuewas(){
       int Feld[i];
    };
    
    int main()
    {
      cin>>i;
    
      system("PAUSE");	
      return 0;
    }
    


  • Späte Bindung kannst du mit virtuellen Funktionen erreichen.
    Da wird zur Laufzeit dann ermittelt auf was für ein Objekt dein Zeiger zeigt und wählt so die richtige Funktion dafür aus...

    deren Parameter sich erst zu Laufzeit bestimmen

    Soweit ich weiß geht das mit den Paramtern nicht, wie gesagt nur die Funktion kann bestimmt werden die aufgerufen wird die Paramter müssen jedoch zur Compilezeit feststehen...

    Beispiel:

    class Basis {
    
      public:
             virtual func() { cout <<"In Basis"; }
    
    };
    
    class derived1 {
    
      public:
             func() { cout <<"In derived1";  }
    
    };
    
    class derived2 {
    
      public:
             func() { cout <<"In derived2"; }
    
    };
    
    int main()
    {
    
    Base b, *p_b;
    derived1 d1;
    derived2 d2;
    
    p_b = &b;
    p_b->func(); // Zeigt das cout in Basis an
    
    p_b = &d1;
    p_b->func(); // Zeigt das cout in derived1 an
    
    p_b = &d2;
    p_b->func(); // Zeigt das cout in derived2 an
    
    return 0;
    }
    

    Da kannst du schön sehen das man das alles zur Laufzeit ändern kann und somit aussucht welche Funktion aufgerufen wird (späte Bindung)



  • Genau diese Aufgabe erfüllt das Dispatch-Interface von Microsoft's COM. 😉



  • Ein Aufruf wird nur dann nicht bereits bei der Compilierung umgesetzt, wenn er über den Zeiger oder die Referenz erfolgt.



  • Erstmal danke für eure Antworten. Sie haben mich schon mal weiter gebracht.
    Eine Frage hätte ich dann aber noch. Gibt es ein äquivalent des Dispatch-Interface für Linux? Oder sonst so was in der Art?



  • Ziel der generativen Programmierung ist es genau auf ein Problem zugeschnittenen Code zu erzeugen. Dies ist ziemlich inflexibel, denn man versucht sich auf ein Problem zu beschränken und nicht 256 andere mit zu lösen.

    Deine Frage geht jetzt dahin, wie kriege ich es gebacken zur Laufzeit beliebig viele verwandete Probleme zu lösen nach dem ich meinen Code auf ein Problem zugeschnitten habe. Ist irgendwie ein Wiederspuch, oder?

    Du kannst natürlich hingehen und in dein Programm einen Generator integrieren, der dir zur Laufzeit den Quellcode nach Bedarf erzeugt und übersetzt. Das ist bei Skriptsprachen bzw. wenn dir ein Compiler zur Laufzeit zur Verfügung steht ziemlich witzig eine späte Bindung erreichst du dadurch allerdings nicht wirklich.

    Späte Bindung kann man nur durch die Kombination mit anderen Techniken erreichen.



  • Eigentlich gebe ich dir Recht Mathias, nur finde ich nicht das meine Frage darauf zielte verwandte Probleme zu lösen. Das Problem ist immer das Selbe, nur das Objekt ändert sich oder es werden neue Objekte, die es zu Compilierzeit noch nicht gab (zum Beispiel durch Plugins) hinzugefügt. Jetzt wollte ich halt, dass es eine bestimmte Menge an Funktionen sofort für jedes Objekt was die nötigen Eigenschaften besitzt gibt z.B. sortieren vergleichen etc...
    Vielleicht hat ja mein Gedankenmodell einen Fehler, aber dachte so was wäre machbar.


Anmelden zum Antworten