C++ 具有不同默认参数值的函数

C++ 具有不同默认参数值的函数,c++,default-arguments,C++,Default Arguments,当所有函数参数都有默认值,并且只使用了其中的一部分时,如何解析函数参数? 例子: 我有一个带有多个默认值参数的函数 void fun(string a="", int b=0, string c="", int d=0) { //parse used arguments somehow } 我想将其用于不同的参数值,例如: fun("foo", 10); fun(10, 10); 如何确定使用了哪些参数?参数的最大值是已知的,并且顺序将始终相同。 我不希望像这样运行函数: fun("",

当所有函数参数都有默认值,并且只使用了其中的一部分时,如何解析函数参数? 例子: 我有一个带有多个默认值参数的函数

void fun(string a="", int b=0, string c="", int d=0)
{
 //parse used arguments somehow
}
我想将其用于不同的参数值,例如:

fun("foo", 10);
fun(10, 10);

如何确定使用了哪些参数?参数的最大值是已知的,并且顺序将始终相同。 我不希望像这样运行函数:

fun("", 3, "", 10);
我不能使用可变函数

有什么想法吗?

使函数过载

void fun(int b, int d) { fun("", b, "", d); }
然后
fun(3,10)
就相当于
fun(“,3,”,10)

重载函数

void fun(int b, int d) { fun("", b, "", d); }
然后
fun(3,10)
就相当于
fun(“,3,”,10)

重载函数

void fun(int b, int d) { fun("", b, "", d); }
然后
fun(3,10)
就相当于
fun(“,3,”,10)

重载函数

void fun(int b, int d) { fun("", b, "", d); }

然后
fun(3,10)
就等同于
fun(“,3,”,10)

“我如何确定使用了哪些参数?”您不能。我也相当肯定
有趣(10,10)
要么不会编译,因为10不是字符串,要么不会执行您期望的操作(它可能会假设10是指向char*的指针)@Borgleader,不,它不会编译
std::string
故意确保了这一点。@chris如果你用0调用它就会这样,在这种情况下,这是一个非常讨厌的错误源。@Borgeader,对于0,是的。这是非常不幸的。“我怎样才能确定使用了哪些参数?”你不能。我也相当肯定
有趣(10,10)
要么不会编译,因为10不是字符串,要么不会执行您期望的操作(它可能会假设10是指向char*的指针)@Borgleader,不,它不会编译
std::string
故意确保了这一点。@chris如果你用0调用它就会这样,在这种情况下,这是一个非常讨厌的错误源。@Borgeader,对于0,是的。这是非常不幸的。“我怎样才能确定使用了哪些参数?”你不能。我也相当肯定
有趣(10,10)
要么不会编译,因为10不是字符串,要么不会执行您期望的操作(它可能会假设10是指向char*的指针)@Borgleader,不,它不会编译
std::string
故意确保了这一点。@chris如果你用0调用它就会这样,在这种情况下,这是一个非常讨厌的错误源。@Borgeader,对于0,是的。这是非常不幸的。“我怎样才能确定使用了哪些参数?”你不能。我也相当肯定
有趣(10,10)
要么不会编译,因为10不是字符串,要么不会执行您期望的操作(它可能会假设10是指向char*的指针)@Borgleader,不,它不会编译
std::string
故意确保了这一点。@chris如果你用0调用它就会这样,在这种情况下,这是一个非常讨厌的错误源。@Borgeader,对于0,是的。这是非常不幸的。