Jeśli mam rodzajowe struct/klasa:Jak wypromować dwa typy szablonów dla operacji arytmetycznych, takich jak typy wbudowane?
template<typename T>
struct Container
{
T value;
Container(const Value& value) : value(value) { }
};
I chcę, aby wykonać operację na dwóch z nich:
template<typename T, typename U>
Container<T> operator+(const Container<T>& lhs, const Container<U>& rhs)
{
return Container<T>(lhs.value + rhs.value);
}
Problem polega na tym, że jeśli lhs
jest typu Container<int>
i rhs
jest typu Container<float>
, wtedy otrzymam z powrotem Container<int>
. Ale gdybym miał wykonać auto result = 2 + 2.0f
, to byłby to typ result
z typu float
. Tak więc zachowanie jest niespójne między typami wbudowanymi a typami niestandardowymi.
W jaki sposób podjąłbym przeciążenie operator+
i zwrócę je na numer Container<float>
, podobnie jak sposób, w jaki C++ obsługuje arytmetyczną promocję z wbudowanymi typami?
można użyć C++ 11? –
@PiotrSkotnicki Tak. – Therhang