wie beliebiges Objekt mit Funktionen/Variablen erweitern?



  • Hi, für eine Funktion benötige ich zusätzliche Daten die mit Sub-funktionen berechnet werden müssen. Wie diese Daten generiert werden und von welchen Typ soll der Nutzer bestimmmen können (Typ der Daten is immer gleich, nur die Quelle kann unterschiedlich sein). Die Daten werden immer aus zwei Objekten des Typs generiert.
    z.B. als Eingabe:
    -Typ int und Datengenerierungsfunktion float getData(int, int)
    -oder Typ double und float genData(double, double)
    -oder Typ std::pair<std::ofstream, std::vector<char>> und float getData(std::pair<std::ofstream, std::vector<char>>, pair<std::ofstream, std::vector<char>>)

    Am Ende habe ich dann zB immer einen float Wert, der dann für weitere Berechnungen verwendet werden soll. Neben diesen wird die Funktion getData auch noch mal live verwendet.

    Beispielanwendung für Datentyp int:
    gegeben die Zahlen von 1 bis 10. Ausgabe sollen die Werte einer Matrix sein, für die für jede Zahlenkombination folgendes ausspuckt: Summe der Abstände zu alle Zahlen 1 bis 10 von der ersten Zahl + die der zweiten Zahl + der beiden Zahlen selbst. getData(int a, int b) wär dann std:abs(a-b).
    Um den Wert der Matrix an der Stelle (1,3) auszurechenen müsste ich also:
    abs(1-1)+abs(1-2)+abs(1-3)+...abs(1-10)+abs(3-1)+abs(3-2)+abs(3-3)+....abs(3-10)+abs(1-3) ausrechnen.
    Da das für jede Stelle fast das selbe ist, könnte man ja für jede Zahl vorab Summe der Abstände berechnen. Da brauch die dann nur zu addieren und dann noch + ihren Abstand zueinander.
    Hab dann am Ende sowas wie getMatrixWert( Erweitert<int,getData> a, Erweitert<int,getData> b).
    Erweitert speichert dann als zusätzlichen Wert noch die summe der Abstände von 1-10. Ob die ganze Matirx oder nur manche ausgerechnet werden, bleibt dem Nutzer überlassen.

    Nun möchte ich das Objekt nicht unbedingt kopieren, wenn ich es mit variablen erweitere, int wie im Beispiel, geht noch schnell aber es kann auch durchaus größer werden. Wie könnte ich das machen?



  • Klingt alles sehr diffus, dürfte aber alles problemlos mit std::function/lambdas lösbar sein.



  • Fragender42 schrieb:

    für eine Funktion

    Was meinst du mit "Funktion"?

    Sub-funktionen

    was sind "Sub-Funktionen"?

    von welchen Typ soll der Nutzer bestimmmen können (Typ der Daten is immer gleich[/quote} Benutzerdefinierter Typ, der immmer gleich is? Okay.

    nur die Quelle kann unterschiedlich sein)

    Was ist eine "Quelle"?

    . Die Daten werden immer aus zwei Objekten des Typs generiert.

    Was sind "Objekte des Typs"?

    bla

    Ja. Okay. Was?



  • qaw schrieb:

    Klingt alles sehr diffus, dürfte aber alles problemlos mit std::function/lambdas lösbar sein.

    Ja solche Funktionen verwendet ich schon. Die Frage galt eher wie man das am Besten in Objekte pakt.

    subsubsubs schrieb:

    Was meinst du mit "Funktion"?

    Z.B. aus dem Beispiel die Matrixelemente berechnen.

    was sind "Sub-Funktionen"?

    Unterfunktionen. Aus dem Beispiel wär das getData(..). Also die "Hauptfunktion" (Matrixelemente berechnen) verwendet Funktionen, die man teils auch einzeln für jedes Objekt (im Beispiel Zeilen, Spaltennummer) anwenden kann (mit den dazugehörigen Objekten als 2.Parameter (Beispiel 1-10)), und somit vorab berechnen könnte.

    Benutzerdefinierter Typ, der immmer gleich is? Okay.

    Was ist eine "Quelle"?

    Die Daten (immer gleichen Typs) werden mittels einer Funktion (Nutzerwahl, return Wert ist aber immer gleich Typ der Daten) von wiederum anderen Daten (Nutzerwahl, "Quelle", parametertyp der vom Nutzer gewählten Funktion) generiert.
    Allgemeines Beispiel (jedoch mit nur einen Parameter) wär eine Funktion, welche die Adresse eine Varaible bestimmt (&). Nutzer könnte nun als Eingabe int, double, float oder eigene Klasse verwenden, mit &variable hat man immer einen int Wert raus (was im Beispiel dann die "Daten" wären).

    Was sind "Objekte des Typs"?

    Der Typ, den der Nutzer bestimmten kann und dem Parametertyp der Funktion entspricht, die auch der Nutzer bestimmen kann. Das ganze soll dann für mehrere Objekte des Typs berechnet werden. Im Beispiel wären das die Zeilen und Spaltennummern.


Log in to reply