Open
Description
现在基本上来说谈起遍历元组,无非就是多套一层,然后 std::index_sequence
+ std::make_index_sequence
解决。
标准高的话用 C++17 折叠表达式,或者 C++20 引入的lambda显式写明模板参数,也就是:
template<typename Func, typename... Args>
void iterate_tuple(Func f, const std::tuple<Args...>& tuple) {
[&]<std::size_t... idx>(std::index_sequence<idx...>){
(f(std::get<idx>(tuple)), ...);
}(std::make_index_sequence<sizeof...(Args)>());
}
int main(){
auto print = [](const auto& v){
std::cout << v << ' ';
};
std::tuple<int, double, std::string> tuple{ 1,1.2,"😅" };
iterate_tuple(print, tuple);
}
非常的简单直观,godbolt。
原文使用的 std::variant
让我觉得很诡异。
https://changkun.de/modern-cpp/zh-cn/04-containers/#%E8%BF%90%E8%A1%8C%E6%9C%9F%E7%B4%A2%E5%BC%95
Metadata
Metadata
Assignees
Labels
No labels