c++17 template method instantiation + initialisation?

Gast #7282589
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...
#7282820
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren