gpt4 book ai didi

c++ - 使用模板 C++ 重载运算符

转载 作者:行者123 更新时间:2023-12-01 14:47:36 25 4
gpt4 key购买 nike

我正在制作一个矩阵库,我希望能够做类似的事情

Matrix<double> = Matrix<int> + Matrix<double>

这可能吗?

这是我现在所拥有的:
template<typename T>
Matrix<T>& Matrix<T>::operator+(const Matrix& rhs) {
if(w != rhs.w || h != rhs.h) {
printf("\e[31m[ERROR] Arithmetic Error: attempted to add %dx%d matrix to %dx%d matrix\e[0m\n", w, h, rhs.w, rhs.h);
}
else {
for(uint32_t i = 0;i < size;++i) {
m[i] += rhs.m[i];
}
}
return *this;
}

最佳答案

您可以制作 operator+模板然后它可以接受 Matrix 的其他实例化.

例如。

template<typename T>
template<typename X>
Matrix<T>& Matrix<T>::operator+(const Matrix<X>& rhs) {
if(w != rhs.w || h != rhs.h) {
printf("\e[31m[ERROR] Arithmetic Error: attempted to add %dx%d matrix to %dx%d matrix\e[0m\n", w, h, rhs.w, rhs.h);
}
else {
for(uint32_t i = 0;i < size;++i) {
m[i] += rhs.m[i];
}
}
return *this;
}

请注意,对于您当前的实现,您必须确认允许当前实例访问其他实例的成员,例如 rhs.w .不同的实例被视为不同的类型。

关于c++ - 使用模板 C++ 重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62383511/

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