Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   was ist der Sinn von Templates/Generics ? (https://www.delphipraxis.net/215982-ist-der-sinn-von-templates-generics.html)

himitsu 8. Okt 2024 15:25

AW: was ist der Sinn von Templates/Generics ?
 
Ein Class.Create Constructor gibt per Definition IMMER das Objekt zurück und wenn nicht, dann wird ordnungsgemäß eine Exception geworfen.

DeddyH 8. Okt 2024 15:44

AW: was ist der Sinn von Templates/Generics ?
 
Und weshalb werden hier immer wieder unaufgefordert solche Code-Monster gepostet, die doch kein Mensch liest? TL;DR

Uwe Raabe 8. Okt 2024 15:46

AW: was ist der Sinn von Templates/Generics ?
 
Zitat:

Zitat von DeddyH (Beitrag 1541958)
Und weshalb werden hier immer wieder unaufgefordert solche Code-Monster gepostet, die doch kein Mensch liest? TL;DR

In der Tat! Dafür macht sich ein Dateianhang, den man in der IDE öffnen kann, deutlich besser.

paule32.jk 8. Okt 2024 16:05

AW: was ist der Sinn von Templates/Generics ?
 
in dem Zusammenhang mit Templates (jetzt in GNU C++) ...
Code:
class TObject {
public:
    virtual std::string ClassName() const;
    virtual ~TObject();
};

template <typename T>
class QChar: public TObject {
public:
    // constructor
    QChar(T);
};

extern "C" {
DLL_EXPORT bool
isBlank_QChar(uint64_t addr) {
    auto * objptr = reinterpret_cast<qvc::QChar*>(addr);
    check_pointer(addr, reinterpret_cast<uint64_t>(objptr));
   
    std::cout << "objptr = " << objptr->ClassName() << std::endl;
   
    if (objptr->isBlank())
    return true;
    return false;
}
};
in der Funktion oben caste ich einen bereits erstellten Klassen-Pointer (vieleicht nicht die beste Lösung, aber das sei erstmal dahingestellt).
Die Frage ist aber nun: wie kann ich in der Zeile:
Code:
auto * objptr = reinterpret_cast<qvc::QChar*>(addr);
den Typen erhalten ?
muss ich dazu den Typen während der Initialization speichern, um ihn dann and <qvc::QChar*> angeben zu können ?
wie macht man das ?

Blup 9. Okt 2024 09:31

AW: was ist der Sinn von Templates/Generics ?
 
Free im Constructor ist nicht zulässig, da dann ein Zeiger auf die nicht mehr existierende Objectinstance zurückgegeben wird.
Die einzige Möglichkeit den Constructor abzubrechen ist eine Exception.

Ich habe noch nicht verstanden was du eigentlich erreichen willst.
Vieleicht erklärst du das ausführlicher. Wahrscheinlich ist das sogar ein neues Thema.

Leitet man von einem Generic eine konkrete Klasse ab, bestimmt man damit Classname selbst.
Ist ein Object erstellt, kann man auf Object.ClassName und Object.ClassType zugreifen.

Erstellt man ein Object direkt von einem Generic, leitet Delphi selbständig eine konkrete Klasse ab.

paule32.jk 9. Okt 2024 12:37

AW: was ist der Sinn von Templates/Generics ?
 
ich habe das ganze schon fast gelöst, das Projekt kann in meinen letzten Link betrachtet werden.

Das Projekt, an dem ich gerade sitze ist folgendes:
- FPC mit GNU C++ zu kombinieren, so dass dann:
- die FPC VCL (die der Delphi VCL entspricht) mit den GNU C++ zu verknüpfen.
so hat man dann einheitliche Funktionen, die sowohl in FPC und GNU C++ verwendet werden können.
Erst wollte ich das Qt-Framework, das unter GNU C++ geschrieben wurde in FPC zugänglich machen.
Aber da gibt es schon anstrengungen, die mir aber nicht gefallen, da diese vorwiegend prozedural
gehalten sind - mein Ansatz aber das Klassen-Model nutzen soll, so dass man dann nicht mehr:
ptr := Create_QWidget();

hat, sondern:
ptr := QWidget.Create;

was für mich eindeutig komfortabler ist.

Da ich nun verschiedene Datentypen unterstützen würde, habe ich erstmal normale klassische OOP
angewendet. Jetzt aber auf den aufsteigenden Ast bin, auch in die tiefen der Template-Verarbeitung
zu steigen.

Ob das dann zweckmäßig erscheint, sei erstmal dahin gestellt - zumal es für mich auch eine Art Übung
und Lehrzweck dient.

Also seid da nicht emboßt, wenn der Quellcode wie Kraut und Rüben ausschaut - bin halt kein richtiger
Programmierer - also angelernt...

himitsu 9. Okt 2024 12:46

AW: was ist der Sinn von Templates/Generics ?
 
in Delphi kann man Methoden einer Klasse auch als EXTERNAL deklarieren

und dann als Einzelfunktionen z.B. in einer DLL (Delphi, C+++ oder sonstwas) exporieren, welche von der Delphi-Klasse dann genutzt werden.


Ansonsten einfach einen Record, darin Pointer-Variablen auf Funktionen. (ähnlich dem TMemoryManager in der System-Unit, was auch zwischen Delphi und C++Builder genutzt werden kann)

paule32.jk 9. Okt 2024 13:00

AW: was ist der Sinn von Templates/Generics ?
 
Zitat:

Zitat von himitsu (Beitrag 1542000)
Ansonsten einfach einen Record, darin Pointer-Variablen auf Funktionen. (ähnlich dem TMemoryManager in der System-Unit, was auch zwischen Delphi und C++Builder genutzt werden kann)

das mache ich bereits...

aber ich habe jetzt festgestellt, das ich ALLE ctor's wegschneiden kann, und durch ein Template ersetzen kann.
Das spart in meiner momentanen Sicht der Weise, an binären Speicherplatz.
Klar, man hat vielleicht einen kleinen Payload - aber der ist, so denke ich, schnell wieder reingeholt.

paule32.jk 9. Okt 2024 14:40

AW: was ist der Sinn von Templates/Generics ?
 
Zitat:

Zitat von himitsu (Beitrag 1541913)
bei
Delphi-Quellcode:
Value: T
aber leider nicht bei
Delphi-Quellcode:
Value: array of T

also ich habe jetzt folgendes vom Compiler übersetzen können:
Delphi-Quellcode:
constructor QChar<T>.Create(v: Array of T);
var
    i: Integer;
begin
    for i := 0 to High(v) do
    foo := v[i];
end;
irgendwie finde ich das Klasse, was man so machen kann - zumal man auch Code sparrt ...

himitsu 9. Okt 2024 15:13

AW: was ist der Sinn von Templates/Generics ?
 
Zitat:

Zitat von himitsu (Beitrag 1541913)
Es kann sogar eine teilweise Automatik (Inferenz) genutzt werden, wo der Compiler z.B. anhand der übergebenen Variable das T selbst bestimmt.
Delphi-Quellcode:
MyValue.SetValue<Integer>(MyInt);
MyValue.SetValue(MyInt);
bei
Delphi-Quellcode:
Value: T
aber leider nicht bei
Delphi-Quellcode:
Value: array of T

:angle:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz