Функция Variadic, которая возвращает количество аргументов, переданных ей - PullRequest
0 голосов
/ 04 мая 2018

Я попытался реализовать функцию, которая возвращает количество аргументов, переданных ей. Вот код:

int SIZE(int n, ...){

va_list ARGS;
va_start (ARGS, n);
int length(0);

void* current_arg;
do{
    current_arg=va_arg(ARGS, void*);
    length++;
}while( current_arg != nullptr);

va_end(ARGS);
return length;

}

До этого я проводил некоторые исследования, поэтому я знал, что это не сработает. И действительно, это не так: когда я передал ему два аргумента, он вернул 12! Я все еще хотел бы понять, почему это не сработало. Я вижу два варианта:

  • Проблема в том, как я разработал алгоритм, который делает его неисправным.

  • Функция принимает гораздо больше аргументов, чем те, которые ей явно заданы.

Я давно не программирую, поэтому мне нравится экспериментировать с подобными вещами. Не могли бы вы помочь мне выяснить, что не так с моей функцией, пожалуйста? Спасибо

1 Ответ

0 голосов
/ 04 мая 2018

Поскольку вы пометили C ++ 11, вам следует рассмотреть пакетов параметров , делающих вашу функцию:

template<typename... T>
constexpr unsigned numberOfArguments(const T&... args)
{
    return sizeof...(T);
}

Как видно из комментариев к основному посту, оператор sizeof...() в этом случае вернет размер пакета параметров шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...