我有一個模板與typename T
模板。它包含一個函數,爲什麼我的模板函數不能將'int'提升爲'T',其中'T'='double'?
template <typename T, size_t a>
myClass<T,a> operator+(myClass<T,a> lhs, const T& rhs) {
return lhs += rhs;
}
myClass<T,a> myClass<T,a>::operator+=(const T& rhs) {
// Do addition, depends on 'a'.
return *this;
}
當我調用此方法,例如
myClass<double, 2> myObj_double_2(constructor args);
myObj_double_2 = myObj_double_2 + 5.2;
我沒有問題。
如果我打電話然而
myObj_double_2 = myObj_double_2 + 5;
那麼編譯器給了我這樣的消息 - No match for 'operator+' (operand types are 'myClass<double, 2ul>' and 'int'). Candidates are ... note: deduced conflicting types for parameter 'const T' ('double' and 'int')
。
我可以通過某種方式編寫代碼以允許通過轉換爲T
的其他類型(例如,double(5)是一個有效的構造函數調用)嗎?
嘗試'myObj_double_2 = myObj_double_2 + 5.0;' – 101010
是的 - 這將毫無困難地工作,但它不能解決我所問的問題(雖然它是簡單明顯的解決方案) – chrisb2244
沒有int-> double「推廣「存在。 –