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

C++ tuple处理逻辑修改:数值求和、字符串拼接及剩余元素计数

核心修改点

  • 修正求和条件:在算术类型判断基础上增加排除bool类型的逻辑,同时修复原代码的语法错误&!为&&
  • 新增剩余元素计数逻辑:遍历tuple元素时,对既不满足求和条件、也不满足字符串拼接条件的元素计数
  • 统一单次遍历tuple完成三个计算逻辑,避免多次遍历开销

完整可运行代码

#include <iostream>
#include <tuple>
#include <string>
#include <type_traits>
#include <algorithm>

using namespace std;

template<class ... Args>
auto process_tuple(tuple<Args...> const& t) {
    double sum_res = 0.0;
    string concat_res;
    size_t leftover_cnt = 0;

    auto process_element = [&](auto&& arg) {
        using T = decay_t<decltype(arg)>;
        constexpr bool is_summable = is_arithmetic_v<T> && !is_same_v<T, bool>;
        constexpr bool is_concatable = is_convertible_v<T, string>;

        if constexpr (is_summable) {
            sum_res += arg;
        } else if constexpr (is_concatable) {
            concat_res += arg;
            // 若需要拼接的字符串之间加空格,可取消下一行注释,最后再修剪末尾空格即可
            // concat_res += " ";
        } else {
            leftover_cnt++;
        }
    };

    apply([&](auto&&... args) { (process_element(args), ...); }, t);
    return make_tuple(sum_res, concat_res, leftover_cnt);
}

template<class ... Args>
void test(tuple<Args...> t) {
    auto [sum_val, concat_val, leftover] = process_tuple(t);
    cout << "(" << sum_val << ", \"" << concat_val << "\", " << leftover << ")" << endl;
}

int main(){
   test(make_tuple(10, true, "Hello", 2.3f, "World")); 
}

运行输出

(12.3, "HelloWorld", 1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:06