c++ 实现对象迭代器

#include <iostream>
#include <list>
#include <vector>
using std::list;


template <typename T, typename To>
struct Caster {
    list<To> *ptr;
    Caster(list<To>* ptr) : ptr(ptr) {};
    struct Iter {
        typename list<To>::iterator iter, next;
        Iter(typename list<To>::iterator iter)
                : iter(iter), next(std::next(iter)) {}
        T operator*() { return iter->operator T(); }
        Iter& operator++() { iter = next++; return *this; }
        Iter operator++(int) { auto tmp = *this; ++(*this); return tmp; }
        bool operator!=(const Iter& other) { return iter != other.iter; }
        // bool operator!=(Iter& a, Iter& other) { return a != other.iter; }
    };
    Iter begin() const { return Iter(ptr->begin()); }
    Iter end() const { return Iter(ptr->end()); }
    size_t size() { return ptr->size(); }
    T front() { return ptr->front().operator T(); }
    T back() { return ptr->back().operator T(); }
};

struct  Var;

struct Node {
    struct input_t;
    int id;
    list<input_t> _inputs;
    struct input_t {
        Node* node;
        input_t(Node* n) : node(n) {
        }
        operator Node*() {
            return node;
        }
        operator Var*() {
            return (Var*)(node);
        }
    };
    void add_inputs(const std::vector<Node*>& nodes) {
        for (auto& p : nodes) {
            _inputs.push_back(input_t(p));
        }
    }
    inline Caster<Node*, Node::input_t> inputs() {return &_inputs; }
};

struct Var : Node {

};

int main() {
    Node* node = new Node();
    Node* node2 = new Node();
    node->add_inputs(std::vector<Node*>{node2});
    node->add_inputs(std::vector<Node*>{node2});
    Caster<Node*, Node::input_t> out =  node->inputs();
    for(const auto& data : out) {
        std::cout << data->id << std::endl;
    }
    Caster<Node*, Node::input_t>::Iter it = out.begin();
    auto end = out.end();
    while (it != end) {
        // std::cout << it.operator*()->id << std::endl;
         std::cout << (*it)->id << std::endl;
         it++;
    }
}

输出:

0
0
0
0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝鲸123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值