在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++
}发布于 2021-09-04 18:43:40
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});发布于 2021-09-05 03:28:40
在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})发布于 2021-09-04 23:42:22
C++没有这个特性。如this answer所示,您可以通过命名结构的成员来模拟它。或者,您可以命名参数的各个类型:
#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});
}https://stackoverflow.com/questions/69057971
复制相似问题