编译期的序列遍历

编程入门 行业动态 更新时间:2024-10-27 09:37:29

编译期的序列<a href=https://www.elefans.com/category/jswz/34/1771029.html style=遍历"/>

编译期的序列遍历

代码

下面每一行代码要是研究明白啊
下面是c++11

#include <tuple>
#include <iostream>template <size_t... S>
struct IndexSequence {}; template <size_t N, size_t... S>
struct IndexSequenceMaker : public IndexSequenceMaker<N - 1, N - 1, S...> {}; template <size_t... S>
struct IndexSequenceMaker<0, S...> {using Type = IndexSequence<S...>;
};template <size_t N>
using MakeIndexSequence = typename IndexSequenceMaker<N>::Type;template <typename T, typename F>
void ForEachTuple(T&& tuple, F&& consumer)
{ForEachTupleInternal(std::forward<T>(tuple), std::forward<F>(consumer), MakeIndexSequence<std::tuple_size<T>::value> {});
}template <typename T, typename F, size_t... S>
void ForEachTupleInternal(T&& tuple, F&& consumer, IndexSequence<S...>)
{std::initializer_list<int> { (consumer(std::get<S>(tuple)), 0)... };
}struct Consumer {template <typename T>void operator()(T&& value){   std::cout << value << std::endl;}   
};int main(int argc, char* argv[])
{ForEachTuple(std::make_tuple(1, 2.1, "Hello"), Consumer {});return 0;
}

下面是c++14支持了序列生成

template <typename T, typename F>
void ForEachTuple(T&& tuple, F&& consumer)
{// c++ 14 的 make_index_sequenceForEachTupleInternal(std::forward<T>(tuple), std::forward<F>(consumer), std::make_index_sequence<std::tuple_size<T>::value> {});
}template <typename T, typename F, size_t... S>
void ForEachTupleInternal(T&& tuple, F&& consumer, std::index_sequence<S...>)
{std::initializer_list<int> { (consumer(std::get<S>(tuple)), 0)... };
}int main(int argc, char* argv[])
{// c++ 14 的 lambda 中 auto 作为参数ForEachTuple(std::make_tuple(1, 2.1, "Hello"), [](const auto& value) -> void { std::cout << value << std::endl; });return 0;
}

更多推荐

编译期的序列遍历

本文发布于:2023-11-15 20:57:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1606236.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:遍历   序列

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!