Sie benötigen Template-Spezialisierung verwenden. Außerdem sollten Sie den Vorlagenparameter To
als erstes Vorlagenargument verschieben, da dies der Rückgabetyp ist und der Compiler nicht in der Lage ist, daraus abzuleiten.
Erstellen Sie zunächst die primäre Template-Funktion, aber keine eine Implementierung davon:
template<typename To, typename From>
To map(From from);
nun tun Spezialisierung für die Zuordnungen, die Sinn machen:
template<>
E2 map(E1 from)
{
return static_cast<E2>(from);
}
Wie Sie‘ Die Spezialisierung für die Mappings, die Sinn ergeben, liefert einen Fehler, wenn Sie versuchen, diejenigen aufzurufen, die dies nicht tun. Zum Beispiel auf VS2012, wenn Sie tun:
E3 value = map<E3>(e1_value);
Sie erhalten eine „unresovled externes Symbol“ Fehlermeldung erhalten, da es für die Zuordnung keine Implementierung ist.
Gehen Sie mit Template-Spezialisierung –
Können Sie mir ein Beispiel geben? –