Форум программистов, компьютерный форум CyberForum.ru

Переменное число аргументов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ В одномерном массиве с чётным количеством элементов 2N http://www.cyberforum.ru/cpp-beginners/thread637544.html
#include <iostream> #include <iomanip> #include <vector> #include <cmath> using namespace std; int main() { int n; float a;
C++ Огромный размер массива Как присвоить массиву типу char размер 10100. Или придется писать char mass[1000000... Может есть какая функция, увеличивающая размер массива? http://www.cyberforum.ru/cpp-beginners/thread637530.html
C++ cpp, перегрузка операторов
Здравствуйте. Можете, пожалуйста, объяснить, как, например, перегрузить операцию умножения вида const obj& operator*(double а), только справа. Сам сделал следующее: friend const orbital operator*(double c,const obj&M);.... const obj operator*(double c,const obj&M) { obj m(M); (M.coef)*=c; return m; } Хотелось бы, чтоб оператор принимал double и одну const obj&M и возвращал ссылку.
C++ Подсчитать количество пар
Дан массив чисел а1,...,аn. Выяснить, имеются ли в данном массиве два идущих подряд положительных элемента. Подсчитать количество таких пар.
C++ В упорядоченном по убыванию массиве найти разность между наименьшим значением и последним элементом, большим Р http://www.cyberforum.ru/cpp-beginners/thread637464.html
В упорядоченном по убыванию массиве найти разность между наименьшим значением и последним элементом, большим Р.
C++ Факториал Дано целое число N (> 0). Найти двойной факториал N: N!! = N•(N–2)•(N–4)•… (последний сомножитель равен 2, если N — четное, и 1, если N — нечетное). Чтобы избежать целочисленного переполнения, вычислять это произведение с помощью вещественной переменной и вывести его как вещественное число. Помогите пожалуйста с задачей подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1237 / 986 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.08.2012, 12:14     Переменное число аргументов
Хотя мне тоже не особо понятно, зачем вариадические темплейты сделали такими. Хотя, в принципе, догадываюсь: итеративный интерфейс обработки вариадических параметров потребовал бы
  • или перепиливания всего интерфейса вызова функций, чтобы они при вызове таскали с собой типы и их количество;
  • или же сделал бы возможными обращения ко всяким сотым аргументам, когда фактически передано три (это ваш get<> с переменной) — а это ломает напрочь исходную задумку сделать это хоть сколь-нибудь безопаснее обычных va_list.

Если вам надо передать динамическое количество динамически типизированных аргументов в функцию, то есть проверенный временем способ: затолкайте их в коллекцию и передайте эту коллекцию. std::vector<boost::any> в 200 раз понятнее этой шаблонной магии (да, магия внутри буста, но она хотя бы документирована). Да, конечно, что-нибудь вроде
C++
1
2
3
func(1, 2, 3, VA(4, "5", Object(6, 7, 8)));
// ...
void func(int a, int b, double c, const VarargsVector &varargs) { ... }
выглядит не так круто как
C++
1
2
3
func(1, 2, 3, 4, "5", Object(6, 7, 8));
// ...
void func(int a, int b, double c, Types... varargs) { ... }
Но это хотя бы работает везде (я напомню, что та же Студия вообще не поддерживает полиадические темплейты).

А ещё бонусом этот вариант даёт возможность собирать список аргументов в рантайме. Темплейты при всей своей крутизне такого никогда не смогут.
 
Текущее время: 15:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru