You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为std::tuple的每个元素调用成员函数?简洁优雅实现方案

为std::tuple所有元素调用成员函数的简洁实现方案

我之前一直在琢磨怎么用最简洁优雅的方式给std::tuple里的每个元素都调用同一个成员函数,折腾了一阵后终于找到了这个可行的实现:

#include <iostream>
#include <utility>
#include <tuple>
struct A{
    void hi(){ std::cout << "HI\n"; }
};
template<typename Tuple, std::size_t... Is>
void unpack(Tuple& tpl, std::index_sequence<Is...>)
{
    ((std::get<Is>(tpl).hi()),...);
}
int main(){
    std::tuple<A,A,A,A,A,A> tpl { A(), A(), A(), A(), A(), A() };
    unpack(tpl, std::make_index_sequence<6>{});
    return 0;
}

这个实现的核心依赖于C++17引入的折叠表达式,通过((std::get<Is>(tpl).hi()),...)把tuple中每个元素的hi()调用依次展开执行。std::index_sequence和std::make_index_sequence则用来生成tuple元素对应的索引序列,帮我们无缝遍历所有元素。

需要注意的是,这个方案要求编译器支持C++17及以上标准。

内容的提问来源于stack exchange,提问作者toozyfuzzy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:11:53