Wenn ich eine generische Struktur/Klasse:Wie man zwei Schablonentypen für arithmitische Operationen wie eingebaute Typen fördert?
template<typename T>
struct Container
{
T value;
Container(const Value& value) : value(value) { }
};
Und ich möchte eine Operation auf zwei von ihnen auszuführen:
template<typename T, typename U>
Container<T> operator+(const Container<T>& lhs, const Container<U>& rhs)
{
return Container<T>(lhs.value + rhs.value);
}
Das Problem ist, dass, wenn lhs
ist vom Typ Container<int>
und rhs
ist vom Typ Container<float>
, dann bekomme ich eine Container<int>
zurück. Aber wenn ich auto result = 2 + 2.0f
tun würde, dann würde result
vom Typ float
. Daher ist das Verhalten zwischen integrierten Typen und benutzerdefinierten Typen inkonsistent.
Also wie würde ich die operator+
Überladung nehmen und es Container<float>
zurückgeben, ähnlich wie C++ arithmetische Förderung mit eingebauten Typen behandelt?
Können Sie verwenden C++ 11? –
@PiotrSkotnicki Ja. – Therhang