C++中命名参数的使用
How to use named parameters in c++
在 python 中,我们可以使用参数名称将参数传递给被调用的函数,就像在下面的代码中一样,我们如何在 C++ 中做同样的事情,
我需要这个是因为,如果我们有太多参数,很容易弄乱传入被调用函数和调用函数的参数的位置
def calendar(year,month,day):
return "f{day}:{month}:{year}"
print(calendar(day=4,year=2021,month=9) #here arguments are passed in order of day,year and month
输出
"4:9:2021"
在使用命名参数
定义函数时,无论传递的参数是否按顺序传递
string calendar(int year,int month,int day)
{
return year,month,day;
}
int main ()
{
cout<<calendar(" ? ");// How can we pass arguments like that of python in c++
}
C 和 C++ 都不支持命名参数。
您最接近的是使用所有参数定义一个 struct
:
struct cal_params {
int year;
int month;
int day;
};
定义函数以获取该结构的实例:
char *calendar(struct cal_params params)
{
...
}
然后使用指定的初始值设定项用复合文字调用函数:
char *str = calendar((struct cal_params){ .year=2021, .month=9, .day=4});
C++没有这个功能。如 所示,您可以通过命名结构的成员来模拟它。或者,您可以命名参数的各个类型:
#include <string>
#include <iostream>
struct Year { int value; };
struct Month { int value; };
struct Day { int value; };
std::string calendar(Year y,Month m,Day d)
{
return std::to_string(y.value) + "-" + std::to_string(m.value) + "-" + std::to_string(d.value);
}
int main ()
{
std::cout<<calendar(Year{2001},Month{31},Day{42});
}
C++20中加入了指定初始化器,但是初始化必须按照声明的顺序
struct date_t {
int year, month, day;
};
std::string make_calendar(date_t date) {
return std::format("{0}:{1}:{2}", date.year, date.month, date.day);
}
然后,你可以这样称呼它:
make_calendar({.year = 2001, .month = 9, .day = 4})
在 python 中,我们可以使用参数名称将参数传递给被调用的函数,就像在下面的代码中一样,我们如何在 C++ 中做同样的事情, 我需要这个是因为,如果我们有太多参数,很容易弄乱传入被调用函数和调用函数的参数的位置
def calendar(year,month,day):
return "f{day}:{month}:{year}"
print(calendar(day=4,year=2021,month=9) #here arguments are passed in order of day,year and month
输出
"4:9:2021"
在使用命名参数
string calendar(int year,int month,int day)
{
return year,month,day;
}
int main ()
{
cout<<calendar(" ? ");// How can we pass arguments like that of python in c++
}
C 和 C++ 都不支持命名参数。
您最接近的是使用所有参数定义一个 struct
:
struct cal_params {
int year;
int month;
int day;
};
定义函数以获取该结构的实例:
char *calendar(struct cal_params params)
{
...
}
然后使用指定的初始值设定项用复合文字调用函数:
char *str = calendar((struct cal_params){ .year=2021, .month=9, .day=4});
C++没有这个功能。如
#include <string>
#include <iostream>
struct Year { int value; };
struct Month { int value; };
struct Day { int value; };
std::string calendar(Year y,Month m,Day d)
{
return std::to_string(y.value) + "-" + std::to_string(m.value) + "-" + std::to_string(d.value);
}
int main ()
{
std::cout<<calendar(Year{2001},Month{31},Day{42});
}
C++20中加入了指定初始化器,但是初始化必须按照声明的顺序
struct date_t {
int year, month, day;
};
std::string make_calendar(date_t date) {
return std::format("{0}:{1}:{2}", date.year, date.month, date.day);
}
然后,你可以这样称呼它:
make_calendar({.year = 2001, .month = 9, .day = 4})