Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,790
Записей в блоге: 4
1

Можно ли наращивать количество аргументов функции? Можно ли вернуть количество аргументов функции?

11.06.2019, 01:15. Показов 1371. Ответов 4

Author24 — интернет-сервис помощи студентам
К примеру есть примитивная запись
C++
1
2
int Funk(bool Er,int q1,int q2,int q3)
{return 0;}
В данной записи объявлены аргументы int q1,int q2,int q3. При расчётах так получилось что нужно использовать алгоритм этой функции, но количество параметров типа int уже больше. Значения этих параметров будут передаваться в массив и использоваться непосредственно в программе. Что можно сделать в этом случае?
Ну отсюда возникает второй вопрос каким способом можно узнать сколько у функции аргументов в моём случае четыре (bool Er,int q1,int q2,int q3)? Как провести проверку и узнать сколько у функции параметров. Просьба не грубить я конечно валенок но мне очень нужны подобные свойства для написания программ. Возможно ли что-то из этого реализовать? Вот у меня есть пример кода.
C++
1
2
3
4
5
6
7
8
9
template<class T> void Fun(T a[], size_t args...)
{}
int main()
{
int *mas1[2][2] = { {1,4},{2,6} };
int mas2[2][2][2];
Fun(static_cast<int*>(*mas1), 2, 2);     //количество аргументов 3
Fun(static_cast<int*>(**mas2), 2, 2, 2);//количество аргументов 4
}
Это возможно только с массивами если да объясните как это происходит? Я так понимаю static_cast тут не нужен можно записать так
C++
1
Fun(**mas2, 2, 2, 2);
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.06.2019, 01:15
Ответы с готовыми решениями:

Странное расположение в памяти аргументов функции с неизвестным количество аргументов
Не могу понять, почему такая программа не работает, выдавая segmentation fault после распечатки...

Можно ли развернуть вектор в список аргументов функции
Есть вектор: std::vector&lt;std::string&gt; m_vec; есть функция: template&lt;typename... Args&gt;...

Чрезмерное количество выходных аргументов функции
Добрый день! Столкнулся с проблемой, там, где не ожидал: в разработанной файл-функции Matlab...

Переменное количество аргументов в функции ( зацикливание )
Здравствуйте. Подскажите пожалуйста как правильно огранизировать доступ к каждому параметру....

4
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
11.06.2019, 01:35 2
Лучший ответ Сообщение было отмечено zss как решение

Решение

Оно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<typename...Args>
void test(const Args&...args)
{
    const std::size_t size=sizeof...(args);
    int array[size]={args...};
    for(std::size_t pos=0;pos<size;++pos)
        std::cout<<array[pos]<<std::endl;
}
 
int main()
{
    test(1,2,3,4);
    return 0;
}
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,790
Записей в блоге: 4
11.06.2019, 03:28  [ТС] 3
Ну да оно. Значит вы вызвали функцию test и в массив который находится внутри этой функции записали какие-то значения значения (наверное будут положены значения 1,2,3,4)?
У вас здесь происходит увеличение размера массива int array[size], согласно этому вычислению size=sizeof...(args)?
А вот в этой строке
C++
1
template<typename...Args>
Args подсветилось почему это некая библиотека или это связано с шаблоном который применяется к функции?
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
11.06.2019, 03:48 4
Цитата Сообщение от Nexi99 Посмотреть сообщение
У вас здесь происходит увеличение размера массива int array[size], согласно этому вычислению size=sizeof...(args)?
Нет. У нас здесь происходит генерация новых функций по единому типовому проекту.
template объявляет шаблон функции, то есть типовой проект. В угловых скобках template<bla-bla-bla> перечисляются типы, которые можно в этом типовом проекте менять. Если у нас есть, скажем, template<typename T>, то можно сгенерить функцию в которой вместо T будет double, а можно функцию в которой T будет string. А во всем остальном код этих функций будет идентичен.

Ну а если у нас идет template<typename...T>, то T уже означает целую пачку типов. Причем, пачку любого размера. И const T&...values в свою очередь означает что функция будет принимать пачку аргументов values, с типами из пачки T. Наконец, args... означает "а разверни тут всю пачку".
1
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,790
Записей в блоге: 4
11.06.2019, 06:38  [ТС] 5
Жёстко.
0
11.06.2019, 06:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2019, 06:38
Помогаю со студенческими работами здесь

Как задать переменное количество аргументов для чужой функции?
Помогите пожалуйста, имеется куча шаблонного кода когда выполняешь ExecSQLEx, например: if not...

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

Как в данной ситуации использовать функции, получающие и возвращающие различное количество аргументов?
Дана действительная матрица размера MхN. Упорядочить строки матрицы по невозрастанию значений...

Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)?
Я конечно, понимаю, что на такие вопросы отвечают &quot;почитай книжку&quot;. Я читала, честное слово:)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru