Функции с другим значением аргументов по умолчанию

0

Как анализировать аргументы функции, когда все имеют значения по умолчанию, и только некоторые из них используются? Пример: у меня есть функция с несколькими аргументами со значениями по умолчанию

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);

И я не могу использовать вариационные функции.

Есть идеи?

  • 1
    «Как я могу определить, какие аргументы были использованы?» Ты не можешь Я также довольно определенно fun(10, 10); либо не скомпилируется, так как 10 не является строкой, либо не будет делать то, что вы ожидаете (вероятно, он предположит, что 10 является указателем на символ *)
  • 0
    @ Borgleader, нет, это не скомпилируется. std::string намеренно убедился в этом.
Показать ещё 2 комментария
Теги:
default-arguments

1 ответ

3
Лучший ответ

Перегрузите функцию.

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

Тогда fun(3, 10) становится эквивалентной fun("", 3, "", 10).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню