Se ho un generico struct/classe:Come promuovere due tipi di modelli per operazioni aritmetiche come fanno i tipi built-in?
template<typename T>
struct Container
{
T value;
Container(const Value& value) : value(value) { }
};
E voglio eseguire un'operazione su due di loro:
template<typename T, typename U>
Container<T> operator+(const Container<T>& lhs, const Container<U>& rhs)
{
return Container<T>(lhs.value + rhs.value);
}
Il problema è che se lhs
è del tipo Container<int>
e rhs
è del tipo Container<float>
, quindi ricevo un Container<int>
indietro. Ma se dovessi fare auto result = 2 + 2.0f
, allora result
sarebbe di tipo float
. Quindi il comportamento è incoerente tra tipi di build e tipi personalizzati.
Quindi, in che modo prendo il sovraccarico dello operator+
e lo restituisco Container<float>
, proprio come C++ gestisce la promozione aritmetica con i tipi incorporati?
si può utilizzare C++ 11? –
@PiotrSkotnicki Sì. – Therhang