gpt4 book ai didi

c++ - 如何迭代打印 std::tuple

转载 作者:行者123 更新时间:2023-11-30 03:24:12 24 4
gpt4 key购买 nike

大多数 C++ 书籍示例都利用递归机制来打印 std::tuple。是否可以通过利用 sizeof...(Typename) 迭代打印 std::tuples?

例如,函数签名如下:

template<typename... Ts>
constexpr void PrintTuple(std::tuple<Ts...>& tuple)

然后我可以使用 sizeof...(Ts) 来知道元组中有多少元素,然后我可以使用 std::get< i >(tuple) 来检索单个元素吗?

最佳答案

这是可能的解决方案之一:

#include <cstddef>
#include <iostream>
#include <tuple>
#include <type_traits>
#include <utility>

template <typename T, std::size_t ...I, typename F>
void tuple_foreach_impl(T &&tuple, std::index_sequence<I...>, F &&func)
{
// In C++17 we would use a fold expression here, but in C++14 we have to resort to this.
using dummy_array = int[];
dummy_array{(void(func(std::get<I>(tuple))), 0)..., 0};
}

template <typename T, typename F> void tuple_foreach(T &&tuple, F &&func)
{
constexpr int size = std::tuple_size<std::remove_reference_t<T>>::value;
tuple_foreach_impl(std::forward<T>(tuple), std::make_index_sequence<size>{},
std::forward<F>(func));
}

int main()
{
auto x = std::make_tuple("Meow", 1, 2.3);

tuple_foreach(x, [](auto &&value)
{
std::cout << value << ' ';
});
// Prints:
// Meow
// 1
// 2.3
}

使用 tuple_foreach 制作合适的打印机应该很简单。

template <typename T> void print_tuple(const T &tuple)
{
std::cout << '{';
tuple_foreach(tuple, [first = true](auto &value) mutable
{
if (!first)
std::cout << "; ";
else
first = 0;
std::cout << value;
});
std::cout << '}';
}

// ...

print_tuple(std::make_tuple("Meow", 1, 2.3)); // Prints `{Meow; 1; 2.3}`

关于c++ - 如何迭代打印 std::tuple,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49864458/

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