【发布时间】:2017-08-16 20:29:57
【问题描述】:
我的班级有两个同名的函数,签名如下:
Mat<T, rows, cols> & transpose()
{
for (size_t i = 0; i < rows; ++i) {
for (size_t j = i + 1; j < cols; ++j) {
std::swap(at(i, j), at(j, i));
}
}
return *this;
}
此方法对矩阵进行就地转置。现在,我有另一个函数,它使原始矩阵保持不变并在新矩阵中进行转置。签名是:
Mat<T, cols, rows> transpose() const
注意列和行是交换的。
现在,我称之为:
Mat<int, 3, 4> d;
// Fill this matrix
Mat<int, 4, 3> e = d.transpose();
这仍然尝试调用第一个方法。如果我将第二种方法重命名为transpose2 并调用它,那很好。有没有办法让这两个功能明确?
【问题讨论】:
-
声明
dconst:Mat<int, 3, 4> const d; -
当我重新发明轮子来学习 C++ 时(就像你显然正在做的那样),我将其中一个设为静态,另一个设为方法;或者,我打电话给一个
getTranspose()和另一个transpose()。 -
@Luca 你做错了什么:你不能用返回值重载。
-
@Luca 没有理由应该首选
const版本。也没有一种方法,不包括实例被const或强制转换为const,或将成员函数指针强制转换为正确的重载。 -
“此方法执行就地转置” - 所以我称之为
inplace_transpose。 :-) 问题是两个函数做不同的事情,但名称相同。
标签: c++ c++11 overloading