我有一个名为 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 的模板更改为 double,但这不是我想要的):
Number<int> t(10,23);
std::cout << t<double> << "\n";
但是这不能编译。 那么有没有办法使用这样的模板呢?或者除了创建普通函数之外的替代解决方案?
最佳答案
我认为你想得太复杂了,你想使用它的方式是行不通的。
当您需要它是 Double 时,请将其设置为 Double,因此我在此处添加了新成员 as()
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;
}
template<typename U>
Number<U> as(){
return Number<U>(U(numerator), U(denominator));
}
private:
T numerator;
T denominator;
};
Number<int> t(10,23);
std::cout << t.as<double>() << "\n";
关于c++ - 使用模板重载 << 运算符来更改输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20438475/