gpt4 book ai didi

c++ - 来自另一个类的模板运算符特化

转载 作者:行者123 更新时间:2023-11-30 05:48:44 25 4
gpt4 key购买 nike

所以我正在尝试更改 operator+ 方法的行为,以防我需要在另一个类的方法中实现更少的方法。如果这里有人可以帮助我完成以下一项或多项工作,我将不胜感激:

  1. 也许我一直在寻找错误?如果是这样,指向正确答案或信息来源的链接会很棒。
  2. 编写类似代码的一般方法?

场景的一些代码示例:

class Rational
{
public:
const Rational Rational::operator+(const Rational &other) const {
Rational ans;
ans._denominator = other.getDenominator() * getDenominator();
ans._numerator = getNumerator() * other.getDenominator() +
other.getNumerator() * getDenominator();
ans.init_rational(); /* <-- This part formats the rational number
every time so that it'd look like 1/2
instead of 2/4(f.e). The purpose of the
specialized method in the other class is
to perform the trace() method where lots
of x+x+x is performed, therefore it'd be
slow and unnecessary to use
"init_rational()" before it's done adding
*/
return ans;
}
};

需要专门的 operator+ 的类:

template <class T>
class Matrix
{
private:
int rows, cols;
vector<vector<T>> mat;
public:
const bool trace(T& ans) const
{
if (_rows() != _cols())
{
ans = T();
return false;
}
ans = T();
for (int i = 0; i < _rows(); i++)
{
ans = ans + mat[i][i];
}
return true;
}
}

顺便说一句,我想我想要完成的事情可以在没有我要求的专门化的情况下完成,而是对整个 Rational 类型进行专门化,这就是这里的实际答案吗?或者我也在寻找一个选项?

P.S:如果您觉得需要更多信息/方法,请询问 :p

编辑:从我得到的回复来看,我想我不打算按照我想要的方式去做,但是做这样的事情怎么样?

template <Rational>
const bool trace(Rational& ans) const{
if (_rows() != _cols()){
ans = Rational();
return false;
}
ans = Rational();
for (int i = 0; i < _rows(); i++){
//adding method implemented here or in a separate function in the Rational class
}
return true;
}

最佳答案

您在问题的第一部分中提出的要求确实不像 Barry 所说的那样有意义,但考虑到您编辑的信息和评论,这也许是您要找的东西吗?

bool trace(Rational& ans) const{return true;}

然后

template<typename T>
bool trace(T& ans) const{return false;}

如果是这样,那么您已经非常接近了,只是您需要将模板声明放在顶部并作为泛型类型,而不是您倾向于特定类型的其他方式:)

关于c++ - 来自另一个类的模板运算符特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28096348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com