Typumwandlung für Vorlagen

8

Ich habe eine Wrapper-Klassenvorlage und möchte implizit in den Wrapped-Typ konvertiert werden, um vorhandene Bibliotheksfunktionen zu verwenden:

%Vor%

f(std::complex<T>) wird nicht für f(ca) verwendet, da die implizite Konvertierung während der Argumentableitung nicht berücksichtigt wird (siehe generierte Fehler-Meldung. hier ).

Im realen Code wird f(...) durch Bibliotheksfunktionen ersetzt, z. aus dem Header <complex> , so dass es nicht geändert werden kann.

Wenn ich A von T vererbe (wie von der Fehlermeldung vorgeschlagen), kompiliert f(ca) . Aber dann ist A nicht für eingebaute Typen definiert (Sie können nicht von ihnen erben). Das würde auch die gesamte Funktionalität von complex<double> bis A<complex<double>> ergeben, die ich vermeiden möchte.

Gibt es einen Workaround dafür?

    
M Zetenyi 20.04.2015, 23:44
quelle

1 Antwort

4

Um das Problem "funktioniert nicht für integrierte Typen" zu lösen, können Sie eine Template-Spezialisierung verwenden. Die std::complex<> version verwendet Vererbung.

%Vor%

Wenn Vererbung nicht akzeptabel ist, ist der einzige Ansatz, den ich kenne, Funktionen zu definieren, die A<> als Argument verwenden. Sie können die Aufgabe jedoch vereinfachen, indem Sie die Funktionen in A<> selbst definieren und so eine vereinfachte Syntax für das Template-Argument und eine argumentabhängige Suche für den Funktionsaufruf verwenden.

%Vor%     
jxh 21.04.2015, 00:16
quelle

Tags und Links