深入解析:std::conditional_t一个用法

例子摘自:

《mastering-the-c17-stl-make-full-use-of-the-standard-library-components-in-c17.pdf》 

struct list_node {    int data;    list_node *next;}; templatestruct list_of_ints_iterator {    friend class list_of_ints;    friend class list_of_ints_iterator; //Const为true的时候,编译成const list_node*,为false的时候,为list_node*    using node_pointer = std::conditional_t;     using reference = std::conditional_t;     node_pointer ptr_;     explicit list_of_ints_iterator(node_pointer p) : ptr_(p) {} public:    reference operator*() const { return ptr_->data; }    auto& operator++() { ptr_ = ptr_->next; return *this; }    auto operator++(int) { auto result = *this; ++*this; return result; }     // Support comparison between iterator and const_iterator types    template    bool operator==(const list_of_ints_iterator& rhs) const    {        return ptr_ == rhs.ptr_;    }     template    bool operator!=(const list_of_ints_iterator& rhs) const    {        return ptr_ != rhs.ptr_;    }    // Support implicit conversion of iterator to const_iterator    // (but not vice versa)    operator list_of_ints_iterator() const    {        return list_of_ints_iterator{ptr_};    }}; struct list_of_ints {    list_of_ints(list_node* phead, list_node* ptail)    {        head_ = phead;        tail_ = ptail;    }    list_node *head_ = nullptr;    list_node *tail_ = nullptr;    // ...public:    //Iterators and Ranges    using const_iterator = list_of_ints_iterator;    using iterator = list_of_ints_iterator;     iterator begin() { return iterator{ head_ }; }    iterator end() { return iterator{ nullptr }; }    const_iterator begin() const { return const_iterator{ head_ }; }    const_iterator end() const { return const_iterator{ nullptr }; }}; templatestruct TypePrint; int main(int, char**)    {            list_node node5{ 5, NULL };        list_node node4{ 4, &node5 };        list_node node3{ 3, &node4 };        list_node node2{ 2, &node3 };        list_node node1{ 1, &node2 };         list_of_ints list{ &node1, &node5 };        for (list_of_ints_iterator it=list.begin(); it!=list.end();++it)        {            //编译时会给出提示信息,打印it的类型。是list_of_ints_iterator            //TypePrint x;              std::cout  x;              std::cout << it << std::endl;        } return 0;    }

posted @ 2025-07-23 11:30  yfceshi  阅读(14)  评论(0)    收藏  举报