gpt4 book ai didi

c++ - 实现 std::iter_difference_t

转载 作者:太空狗 更新时间:2023-10-29 20:49:40 25 4
gpt4 key购买 nike

我正在实现我自己的范围版本,因为它们还不在标准库中。我在执行 std::iter_­difference_­t 时卡住了.

latest draft说:

The type iter_­difference_­t<I> denotes

incrementable_­traits<I>​::​difference_­type if iterator_­traits<I> names a specialization generated from the primary template, and

iterator_­traits<I>​::​​difference_­type otherwise.

似乎最明显的实现是为第一个案例制定一个概念,让第二个案例处理其他所有事情。但我不知道如何将其从英语转换为 C++。有人可以提供代码吗?

最佳答案

第 1 步。成为 std::iterator_traits 的所有者。这使您可以在主要内容中编写一些内容,例如:

template <typename T>
struct iterator_traits {
using __secret_am_i_the_primary_alias = iterator_traits;
};

您可以检查:

template <typename T>
concept is_iterator_primary = std::same_as<
typename iterator_traits<T>::__secret_am_i_the_primary_alias,
iterator_traits<T>>;

第 2 步。现在非常简单:

template <typename T>
struct iter_difference {
using type = typename iterator_­traits<I>​::​​difference_­type;
};

template <is_iterator_primary T>
struct iter_difference<T> {
using type = typename incrementable_­traits<I>​::​difference_­type;
};

template <typename T>
using iter_difference_t = typename iter_difference<T>::type;

关于c++ - 实现 std::iter_difference_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57810396/

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