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

如何在C++中实现类似Python的命名参数传参功能

C++实现类似Python命名参数的方案

C++原生不支持Python那种直接通过参数名任意顺序传参的语法,但可以通过以下两种无额外依赖的原生方案实现相同效果,避免参数多的时候传参顺序混淆:

方案1:C++20 指定初始化器(最推荐)

C++20标准新增了结构体指定初始化器语法,写法和Python命名参数非常接近,是目前最优的实现方式:

#include <iostream>
#include <string>
#include <format>

// 定义存储参数的结构体
struct CalendarParams {
    int year;
    int month;
    int day;
};

std::string calendar(CalendarParams params) {
    return std::format("{}:{}:{}", params.day, params.month, params.year);
}

int main () {       
    // 可以完全任意顺序传参,和Python使用体验一致
    std::cout << calendar({.day = 4, .year = 2021, .month = 9}) << std::endl;
    return 0;
}

运行输出结果为:4:9:2021,和Python示例的输出完全一致。

方案2:链式参数封装(兼容C++11及以上旧版本)

如果你的项目暂时不支持C++20,可以用链式参数的方式封装参数,同样支持任意顺序传参:

#include <iostream>
#include <string>

// 封装参数类,每个set方法返回自身引用实现链式调用
class CalendarParams {
public:
    int year, month, day;
    CalendarParams& set_year(int y) { year = y; return *this; }
    CalendarParams& set_month(int m) { month = m; return *this; }
    CalendarParams& set_day(int d) { day = d; return *this; }
};

std::string calendar(CalendarParams params) {
    return std::to_string(params.day) + ":" + std::to_string(params.month) + ":" + std::to_string(params.year);
}

int main () {       
    // 任意顺序调用set方法传递参数
    std::cout << calendar(CalendarParams().set_day(4).set_year(2021).set_month(9)) << std::endl;
    return 0;
}

内容的提问来源于stack exchange,提问作者Puneeth G P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:06:00