Ich habe eine Klasse durch zwei Vorlagen definiert.definieren implizite Konvertierung von Vorlagenklasse zu primitiven Typ basierend auf anderen Vorlage
template<typename A, typename B> my_class {
private:
A value;
public:
operator A() {
return this->value;
}
};
Ich mag eine implizite Konvertierung zwischen der Klasse und der ersten Art in der Vorlage definieren, aber nur für einen bestimmten zweiten Typen auf der Schablone. Da A
ein C++ primitiver Typ ist, kann ich die Konvertierung auf dieser Seite nicht definieren. Ich habe versucht, std::enable_if
wie diese
operator typename std::enable_if<std::is_same<B, specific_B_type>::value, NumT>::type() {
return this->value;
}
aber ich habe den Kompilierungsfehler
Error C2833 'operator type' is not a recognized operator or type dimensional_analysis
Gibt es eine Möglichkeit, dies zu tun, ohne die gesamte Klasse für B = specific_B_type
spezialisiert zu definieren?
Leider habe ich gerade festgestellt, dass meine Antwort nicht wirklich funktioniert ... Es scheint, dass dies die gesamte Klasseninstanziierung deaktiviert, nicht nur den Operator ... Könnten Sie es nicht akzeptieren, damit ich es löschen kann? :) – Knoep
Okay, fand eine andere (viel einfachere) Lösung. Ist das immer noch was du willst? – Knoep
Ich verwende derzeit die erste Lösung, die Sie gegeben haben: template :: value, void> :: type> '. Es scheint zu funktionieren, aber ich habe es vielleicht nicht gründlich genug getestet. Was ist deine beste Lösung? Danke im Voraus! –
mbtg