gpt4 book ai didi

c++函数名称歧义

转载 作者:太空狗 更新时间:2023-10-29 23:35:09 25 4
gpt4 key购买 nike

我的类有两个具有相同名称和以下签名的函数:

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 并调用它,就可以了。有没有办法让这两个函数变得无歧义?

最佳答案

overload resolution不依赖于返回值,它取决于参数与参数最匹配的函数。您必须使被调用的对象成为const,才能使const 成员函数重载被调用。例如

Mat<int, 4, 3> e = const_cast<const Mat<int, 3, 4>&>(d).transpose();

关于c++函数名称歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45694284/

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