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

如何在C++中实现可接受任意类型参数的add函数并做类型校验?

实现符合需求的C++ add函数(无需函数重载)

完全可以在C++中实现这个需求,无需编写大量函数重载,利用可变参数模板结合**类型萃取(Type Traits)**就能优雅解决。以下是具体实现方案:

核心思路

通过可变参数模板接收任意数量、任意类型的参数,在编译时判断参数数量与类型:

  1. 参数数量不足2个时,输出参数缺失错误;
  2. 参数数量为2个时,检查两个参数是否均为整数类型(可选择严格限定为int或兼容所有整数类型);
  3. 参数数量超过2个或包含非整数类型时,输出对应错误。

完整代码实现

#include <iostream>
#include <type_traits>
#include <utility>

template<typename... Args>
void add(Args&&... args) {
    constexpr size_t arg_count = sizeof...(args);

    if constexpr (arg_count < 2) {
        std::cout << "wrong input! missing arguments" << std::endl;
    } 
    else if constexpr (arg_count == 2) {
        // 检查所有参数是否为整数类型(兼容int/long/short等所有整数类型)
        bool is_all_integral = (std::is_integral_v<std::decay_t<Args>> && ...);
        
        if (is_all_integral) {
            auto sum = (args + ...);
            std::cout << "correct input. addition is " << sum << std::endl;
        } else {
            std::cout << "wrong input" << std::endl;
        }
    } 
    else {
        // 参数数量超过2个,输出错误
        std::cout << "wrong input" << std::endl;
    }
}

// 测试案例
int main() {
    add(10, 12);               // 输出:correct input. addition is 22
    add(5);                    // 输出:wrong input! missing arguments
    add(10, "hello");          // 输出:wrong input
    add(3.14, 5);              // 输出:wrong input
    add(1, 2, 3);              // 输出:wrong input
    add(static_cast<long>(20), static_cast<short>(2)); // 输出:correct input. addition is 22
    return 0;
}

关键细节说明

  1. 可变参数模板:template<typename... Args>允许函数接收任意数量、任意类型的参数,彻底避免了函数重载的繁琐。
  2. 编译时分支处理:sizeof...(args)获取参数总数,结合if constexpr在编译时完成分支判断,无运行时额外开销。
  3. 类型检查逻辑:
    • std::decay_t用于去除参数的引用、const/volatile限定符,确保类型判断准确;
    • std::is_integral_v用于判断参数是否为整数类型(包含int/long/short等)。如果需要严格限定为int类型,只需将判断条件改为:
      bool is_all_int = (std::is_same_v<std::decay_t<Args>, int> && ...);
      
  4. 折叠表达式:(std::is_integral_v<...> && ...)和(args + ...)是C++17引入的语法,简洁实现了参数包的遍历与运算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:02:53