Учитывая функцию в C++, есть ли способ получить количество аргументов, которое требует моя функция? (например, argc в main на языке c).
Например:
double MyFunction(int x , int y) {
int NumOfParam= //.... =2;
}
Почему это может быть полезно для меня?
Например, я хочу написать функцию, которая вставляет все параметры функции в vector, и я думал сделать это с помощью for loop, который выполняет итерацию по аргументам.
Например:
void MyFunction(int x,int y , int z){
std::vector<int> params;
for(int i=0; i< ?? ; i++) {
params.push_back("ArrayOfMyArguments[i]");
}
}





То, что вы ищете, - это шаблон функции в сочетании с вариативные шаблоны (пакеты параметров a / k / a):
template<class ... Args>
void f(Args ... args)
{
std::cout << sizeof...(args) << "\n";
}
int main()
{
f(0, 1, 2); // prints 3
f(0, 1, 2, 3, 4); // prints 5
}
Обычно это не то, что вы использовали бы по умолчанию. Рассмотрите возможность использования диапазонов:
template<class Iterator>
void f(Iterator begin, Iterator end)
{
std::cout << std::distance(begin, end) << "\n";
}
что более идиоматично.
Обратите внимание, что пакет параметров - это конструкция C++ 11.
Вопрос @ Jean-BaptisteYunès помечен как C++ 11;)
Конечно, но такой вопрос позволяет мне, хотя OP не очень осведомлен обо всем этом. Но ты прав.
Мне кажется, что вы пришли из фона JavaScript, где все функции имеют массив arguments. C++ - это не JavaScript, и это невозможно.
Если вы хотите иметь динамическое количество аргументов, решения могут быть следующими:
std::initializer_listargc и argvЕсли все, что вы хотите сделать, это заполнить вектор, я рекомендую вам просто заполнить его напрямую, либо через цикл, когда и где это необходимо, либо через конструктор, принимающий std::initializer_list (как объяснено в одном из моих комментариев).
Если вам действительно нужно передать переменное количество аргументов функции, я рекомендую пакеты параметров.
Или пара Iterator first, Iterator last
Это более или менее, все в одном ответе.
Возможный дубликат Как подсчитать количество аргументов, переданных функции, которая принимает переменное количество аргументов?