Как анализировать аргументы функции, когда все имеют значения по умолчанию, и только некоторые из них используются? Пример: у меня есть функция с несколькими аргументами со значениями по умолчанию
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)
.
fun(10, 10);
либо не скомпилируется, так как 10 не является строкой, либо не будет делать то, что вы ожидаете (вероятно, он предположит, что 10 является указателем на символ *)std::string
намеренно убедился в этом.