У меня есть класс с именем number, и мне нужна помощь с перегрузкой операторов.
template<class T>
class Number{
public:
Number(T _numerator,T _denominator){
numerator = _numerator;
denominator = _denominator;
}
~Number(){
;
}
T GetData(){
return numerator/denominator;
}
friend std::ostream &operator<<(std::ostream &out, Number c) //output
{
out << c.numerator/c.denominator;
return out;
}
void SetData(T _numerator,T _denominator){
numerator = _numerator;
denominator = _denominator;
}
private:
T numerator;
T denominator;
};
это то, что у меня есть, но я бы хотел, чтобы другой оператор был перегружен, например:
template<class X>
friend std::ostream &operator<<(std::ostream &out, Number c) //output
{
out << (X)c.numerator/(X)c.denominator;
return out;
}
таким образом, я могу вызвать cout следующим образом (я знаю, что могу просто изменить шаблон номера на двойной, но это не то, что я хочу):
Number<int> t(10,23);
std::cout << t<double> << "\n";
однако это не компилируется. так можно ли вообще использовать такие шаблоны? или альтернативное решение, отличное от создания обычной функции?