Python 在 C++ 中的枚举

阿托斯

在 Python 中,而不是

colors = ['red', 'green', 'blue', 'yellow']

for i in range(len(colors)):
    print i, '--->', colors[i]

一个可以写

for i, color in enumerate(colors):
    print i, '--->', color

C++ 中有类似的东西吗?

里亚德

你实际上可以在 c++17 中实现类似的东西。

这是一个草图(c++-ish 伪代码),我到处都使用值,它们应该被适当的引用/转发替换,您还应该修复获取类型的方式(使用 iterator_traits),可能支持未知大小,可能实现适当的迭代器界面等

template <typename T>
struct EnumeratedIterator {
    size_t index;
    T iterator;
    void operator++() {
        ++iterator;
    }
    std::pair<size_t, T>() {
        return {index, *iterator};
    }
    bool operator !=(EnumeratedIterator o) {
        return iterator != o.iterator;
    }
}

template <typename T>
struct Enumerated {
    T collection;
    EnumeratedIterator<typename T::iterator> begin() {
        return {0, collection.begin()};
    }
    EnumeratedIterator<typename T::iterator> end() {
        return {collection.size(), collection.end()};
    }
}

auto enumerate(T col) {
    return Enumerated<T>(col);
}

然后像这样使用它

for (auto [index, color] : enumerate(vector<int>{5, 7, 10})) {
    assert(index < color);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章