如果我有返回跨度的函数的 const 和非 const 版本:
class Foo {
public:
std::span<int> myFunc() {
auto begin{vec.begin()};
auto end{vec.end()};
// Do some work that modifies begin and end.
return {begin, end};
}
std::span<const int> myFunc() const {
// Same as above
}
private:
std::vector<int> vec{1, 2, 3};
};
有什么方法可以避免重复函数体吗?
我尝试了
const_cast
方法,但在尝试转换 std::span
返回值时陷入困境。
const_cast
方法只要返回值不违反const
性就可以。
可以从
span<T>
转换为 span<const T>
,但反之则不然。
std::span<const int> Foo::myFunc() const
{
return const_cast<Foo*>(this)->myFunc();
}