Forum: PC-Programmierung c++17 template method instantiation + initialisation?


von Daniel Larrusso (Gast)


Lesenswert?

Aloá,

Erstmal, zum Thema template method instantiation hab ich was gefunden
https://stackoverflow.com/questions/4933056/how-do-i-explicitly-instantiate-a-template-function

>Mein Frage-Background:
Ich habe für eine Ui-Anwendung einen Visitor, der für die verschiedenen 
Caller-Typen die Dispatch(...); Methode hat.
Z.B.
1
void UiVisitorVs::DispShowCall(Strct_ChnlMngr_Node* caller)
2
{
3
    curUi = strctChnlMngrUi;
4
    areaForUis->Add(strctChnlMngrUi, 1, wxEXPAND | wxALL);
5
    while(areaForUis->GetChildren().size() > 1) { areaForUis->Remove(0);}
6
    strctChnlMngrUi->SetRef(caller);
7
    areaForUis->Layout();
8
}

Weil es für alle Caller-Typen immer die selbe Logik ist, überlege ich 
die Methode als Template zu schreiben und mit den konkreten Typen zu 
instantieren.
>ABER
in dem Codeausschnitt gibt es einmal den "caller" (hier vom Typ 
Strct_ChnlMngr_Node) als Argument - so weit so gut - UND eben auch einen 
Pointer auf eine UI-Instanz, welche individuell für jeden Caller-Typ 
ist.

>Daher meine zusammengestrickte Frage, ob es so etwas wie ein Konzept gibt, um 
instanziierte Template-Klassen zu initialisieren?
Die Referenzen auf die verschiedenen UI-Instanzen bekommt der Visitor 
während der Initialisierungsphase wenn das Programm aufstartet.

uiuiui...

von Rolf M. (rmagnus)


Lesenswert?

Ich weiß nicht, ob ich die Frage richtig verstanden habe, aber Templates 
sind ein reiner Compilezeit-Konstrukt und können daher nicht später zur 
Laufzeit instanziiert werden.

von Wilhelm M. (wimalopaan)


Lesenswert?

Daniel Larrusso schrieb:

> Weil es für alle Caller-Typen immer die selbe Logik ist, überlege ich
> die Methode als Template zu schreiben und mit den konkreten Typen zu
> instantieren.

Dur möchtest also bzgl. des Argumenttyps von `caller` abstrahieren. Dann 
mach die o.g. Funktion zu einem Elementfunktionstemplate bspw. durch 
`auto`.

Wobei ich mir nicht sicher bin, ob Du das wirklich willst, denn ich 
vermute, dass hier Laufzeitpolymorphie im Spiel ist, und Du statt dessen 
gegen ein Interface abstrahieren solltest.

>>Daher meine zusammengestrickte Frage, ob es so etwas wie ein Konzept gibt, um
> instanziierte Template-Klassen zu initialisieren?

Nennt sich Konstruktor ;-)
Aber das meinst Du vermutlich nicht: stelle Deine Frage präziser. Denn 
unter template-Instanziierung versteht man die Bildung einer konkreten 
Funktion/Klasse aus einem template.
Dagegen ist das Erstellen eines Exemplars - die Erzeugung eines Objektes 
/ einer Instanz einer komkreten Klasse - etwas anderes.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.