删除返回 std::span 的 const 和非常量函数之间的代码重复?

问题描述 投票:0回答:1

如果我有返回跨度的函数的 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
返回值时陷入困境。

c++ c++20
1个回答
0
投票

const_cast
方法只要返回值不违反
const
性就可以。

可以从

span<T>
转换为
span<const T>
,但反之则不然。

std::span<const int> Foo::myFunc() const
{
    return const_cast<Foo*>(this)->myFunc();
}
© www.soinside.com 2019 - 2024. All rights reserved.