#include <iostream>
template <typename T1, typename T2>
bool func(const T1& t, const T2& t2) {
return t == t2;
}
class Base {
public:
bool operator ==(const Base&) const { return true;}
Base(int y) : x(y) {}
operator int() {
return x;
}
int x;
};
int main() {
func<long, Base>(4L, Base(5)); // not ok
func<long, long>(4L, Base(5)); //ok
}
Kann jemand ausarbeiten, warum die erste Version nicht funktioniert? Mit anderen Worten, warum verwendet der binäre Operator == in func nicht den Konvertierungsoperator int, um den an basis gebundenen Schablonenparameter in int umzuwandeln?Vorlagenparameter mit Umwandlungsoperator
Gibt es sowieso, um Version 1 zu arbeiten, indem Sie nur die Klasse Base ändern?
Hinweis: Sie haben zwei implizite Konvertierungen (der Konstrukteur und der Betreiber). Machen Sie eine explizite Anweisung (vielleicht den Konstruktor), um Probleme zu vermeiden. –
danke für den Hinweis – mkmostafa