提问人:Ludovic Aubert 提问时间:2/17/2022 更新时间:2/17/2022 访问量:216
是否可以使用 C++ 20 概念来避免 const/not const 重复?
can C++20 concepts be used to avoid const/not const duplication?
问:
是否可以使用 C++ 20 概念代替模板来避免(常量/非常量)代码重复?例如(在此示例中,范围与 C++20 范围无关),两个相同的代码,一个是 const,另一个不是:
我知道有可能使用 const_cast,但我想知道是否有更好的方法来使用 C++20 概念?
template <typename Pr>
vector<span<Range> > chunk_by(vector<Range>& path, const Pr& InSameChunk)
{
vector<span<Range> > chunks;
int i_prev=0;
for (int i=1;i < path.size(); i++)
{
if (!InSameChunk(path[i-1], path[i]))
{
span<Range> chunk(&path[i_prev], i - i_prev);
chunks.push_back(chunk);
i_prev=i ;
}
}
span<Range> chunk(&path[i_prev], path.size() - i_prev);
chunks.push_back(chunk);
return chunks;
}
template <typename Pr>
vector<span<Range const> > chunk_by(const vector<Range>& path, const Pr& InSameChunk)
{
vector<span<Range const> > chunks;
int i_prev=0;
for (int i=1;i < path.size(); i++)
{
if (!InSameChunk(path[i-1], path[i]))
{
span<Range const> chunk(&path[i_prev], i - i_prev);
chunks.push_back(chunk);
i_prev=i ;
}
}
span<Range const> chunk(&path[i_prev], path.size() - i_prev);
chunks.push_back(chunk);
return chunks;
}
答: 暂无答案
评论
std::is_const
std::conditional
const
Range
span<Range const> chunk(&path[i_prev], i - i_prev); chunks.push_back(chunk);
chunks.emplace_back(&path[i_prev], i - i_prev);