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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Ferrari F1
=^_^=
551 / 438 / 93
Регистрация: 27.01.2015
Сообщений: 2,551
Записей в блоге: 1
Завершенные тесты: 1
#1

Могут ли теоретически существовать методы с неопределенным числом аргументов? - C++

01.08.2015, 19:49. Просмотров 1068. Ответов 47
Метки нет (Все метки)

Разумно ли использовать va args в таких ситуациях?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2015, 19:49     Могут ли теоретически существовать методы с неопределенным числом аргументов?
Посмотрите здесь:

Чем могут отличаться формальные параметры функции от ее аргументов? - C++
Если кто знает может помочь ответить на вопросы. Заранее спасибо 1 . Чем могут отличаться формальные параметры функции от ее аргументов ?...

Функции с переменным числом аргументов - C++
на пример sum(2,56,515,-23.65,548)?

Шаблоны с переменным числом аргументов - C++
Написал шаблон функции с переменным числом аргументов которая считает сумму своих аргументов. Практики по этому вопросу не имею, поэтому...

Функция с неуказанным числом аргументов - C++
Всем привет! Попытался реализовать функцию, которая выводит свои аргументы(все, кроме первого), но когда запускаю, она дополнительно ещё...

GCC и функции с переменным числом аргументов - C++
Писал мини приложение в студии для работы с векторами, один из методов просто получает сколько угодно аргументов и заполняет координаты...

Шаблонная функция с переменным числом аргументов - C++
Сабж. Каким образом можно запретить использование шаблонной функции, если тип одного из аргументов не соответствует требуемому? Есть...

Функция с переменным числом аргументов (через шаблоны) - C++
Доброго времени суток! Встал вопрос с реализацией такой функции. template<typename... Args> returntype functionname(const Args&......

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
01.08.2015, 19:55     Могут ли теоретически существовать методы с неопределенным числом аргументов? #2
Теоретически - могут. В каких-таких ситуациях?
Ferrari F1
=^_^=
551 / 438 / 93
Регистрация: 27.01.2015
Сообщений: 2,551
Записей в блоге: 1
Завершенные тесты: 1
01.08.2015, 19:58  [ТС]     Могут ли теоретически существовать методы с неопределенным числом аргументов? #3
castaway
в таких ситуациях?
Да, пожалуй, это было лишним)
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,011
01.08.2015, 20:00     Могут ли теоретически существовать методы с неопределенным числом аргументов? #4
В С++11 появились Variadic Templates.
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,269
Завершенные тесты: 3
01.08.2015, 23:24     Могут ли теоретически существовать методы с неопределенным числом аргументов? #5
Ferrari F1, разумеется могут. Только обязательно наличие первого параметра, а также от программиста требуется более-менее "угадать" типы аргументов. Пример - printf(const char* str ...). Из str она узнает не только о количестве аргументов, но и о их типе.
Evg
Эксперт CАвтор FAQ
17533 / 5771 / 369
Регистрация: 30.03.2009
Сообщений: 15,872
Записей в блоге: 26
02.08.2015, 14:46     Могут ли теоретически существовать методы с неопределенным числом аргументов? #6
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Могут ли теоретически существовать методы с неопределенным кол-вом арг-ов?
А чем, по твоему, метод принципиально отличается от функции?
Ferrari F1
=^_^=
551 / 438 / 93
Регистрация: 27.01.2015
Сообщений: 2,551
Записей в блоге: 1
Завершенные тесты: 1
02.08.2015, 14:50  [ТС]     Могут ли теоретически существовать методы с неопределенным числом аргументов? #7
Evg, срашиваю из-за того, что считаю морально устаревшим использование древних средств языка вперемешку с классами. Мне это как минимум кажется неуместным
Evg
Эксперт CАвтор FAQ
17533 / 5771 / 369
Регистрация: 30.03.2009
Сообщений: 15,872
Записей в блоге: 26
02.08.2015, 14:53     Могут ли теоретически существовать методы с неопределенным числом аргументов? #8
Попробуй написать что-то такое без использования va_arg'ов и стандартной библиотечной поддержки Си (т.е. на одних только "родных" технологиях Си++) и увидишь, что "из-за принципов" возникает много геморроя из ничего
cin cout и fscan fprintf
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,011
02.08.2015, 14:53     Могут ли теоретически существовать методы с неопределенным числом аргументов? #9
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
считаю морально устаревшим использование древних средств языка вперемешку с классами.
Так вариадики в помощь.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.08.2015, 14:55     Могут ли теоретически существовать методы с неопределенным числом аргументов? #10
Цитата Сообщение от Evg Посмотреть сообщение
Попробуй написать что-то такое без использования va_arg'ов и стандартной библиотечной поддержки Си
Так ведь ответили уже:
Цитата Сообщение от 0x10 Посмотреть сообщение
В С++11 появились Variadic Templates.
Evg
Эксперт CАвтор FAQ
17533 / 5771 / 369
Регистрация: 30.03.2009
Сообщений: 15,872
Записей в блоге: 26
02.08.2015, 14:58     Могут ли теоретически существовать методы с неопределенным числом аргументов? #11
Цитата Сообщение от Tulosba Посмотреть сообщение
Так ведь ответили уже:
Напиши пример, если не сложно. А то я не очень представляю, как оно будет выглядеть
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,011
02.08.2015, 15:08     Могут ли теоретически существовать методы с неопределенным числом аргументов? #12
Цитата Сообщение от Evg Посмотреть сообщение
А то я не очень представляю, как оно будет выглядеть
Например, так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
template <class T>
void print(const T& item) {
    std::cout << item << std::endl;
}
 
template <class T, class... Args>
void print(const T& item, Args&&... args) {
    print(item);
    print(std::forward<Args>(args)...);
}
 
int main() {
    print(1, 'a', 3.1415);
}
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.08.2015, 15:14     Могут ли теоретически существовать методы с неопределенным числом аргументов? #13
Цитата Сообщение от 0x10 Посмотреть сообщение
Например, так:
Мне почему-то ближе такой вариант (с выводом в одну строку):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
void print() {
    std::cout << std::endl;
}
 
template <class T, class... Args>
void print(const T& item, const Args&... args) {
    std::cout << item << ' ';
    print(args...);
}
 
int main() {
    print(1, 'a', 3.1415);
}
Evg
Эксперт CАвтор FAQ
17533 / 5771 / 369
Регистрация: 30.03.2009
Сообщений: 15,872
Записей в блоге: 26
02.08.2015, 15:33     Могут ли теоретически существовать методы с неопределенным числом аргументов? #14
При таком раскладе действительно нет смысла опускаться до уровня языка Си. Правда опять всё упирается в шаблонное программирование, когда в хидера выставляется много кода, но это уже другой вопрос
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.08.2015, 16:09     Могут ли теоретически существовать методы с неопределенным числом аргументов? #15
Цитата Сообщение от Evg Посмотреть сообщение
При таком раскладе действительно нет смысла опускаться до уровня языка Си.
Основной момент, это то что с variadic templates мы получаем проверку типов на стадии компиляции. Хотя, где-то я натыкался на упоминание того, что в GСС и printf сделали безопасным к типам.
Evg
Эксперт CАвтор FAQ
17533 / 5771 / 369
Регистрация: 30.03.2009
Сообщений: 15,872
Записей в блоге: 26
02.08.2015, 16:42     Могут ли теоретически существовать методы с неопределенным числом аргументов? #16
Цитата Сообщение от Tulosba Посмотреть сообщение
Хотя, где-то я натыкался на упоминание того, что в GСС и printf сделали безопасным к типам
Этого в принципе нельзя сделать. То, что сделано в gcc, это контроль со стороны компилятора в точке вызова printf'а при условии, что формат задан в виде строкового литерала. Понятно, что такими warning'ами накрывается 99% жизненных случаев, но это никак не технология безопасности. Между высоким уровнем (концепцией си++) и низким (концепция си) всегда есть соотношение: чем ниже уровень, тем меньше безопасности (в том смысле, что больше вещей перекладывается на программиста), но больше гибкости
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.08.2015, 20:50     Могут ли теоретически существовать методы с неопределенным числом аргументов? #17
Цитата Сообщение от Evg Посмотреть сообщение
но это никак не технология безопасности
А что же это тогда, если я явно получаю предупреждение в момент компиляции в случае несоответствия типов в формате и аргументов? Понятно, что это всё-таки предупреждение, а не ошибка, но дело тут в первую очередь именно в обнаружении ситуации на ранней стадии.
Evg
Эксперт CАвтор FAQ
17533 / 5771 / 369
Регистрация: 30.03.2009
Сообщений: 15,872
Записей в блоге: 26
02.08.2015, 23:40     Могут ли теоретически существовать методы с неопределенным числом аргументов? #18
В таком примере сия технология ничего не обнаружит

C
char *format = "%s";
...
printf (format, 1);
да и вытекает оно вовсе не из каких-то особенностей языка (как это имеет место быть в Си++), а из дополнительных необязательных возможностей компилятора. Да, она в 99% решит проблему. Но это только в компиляторе gcc, в других-то такого может и не быть. В то время как в Си++ все компиляторы отработают одинаково из-за свойств языка
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
03.08.2015, 09:06     Могут ли теоретически существовать методы с неопределенным числом аргументов? #19
Цитата Сообщение от Evg Посмотреть сообщение
В таком примере сия технология ничего не обнаружит
Потому что в таком примере обработка формата по сути выносится в run-time.
На сях вероятно стоило бы использовать #define, а не char* для обеспечения проверки в compile-time.
А вот на C++ правильно объявить указатель на строку формата:
C++
1
const char* const format = "%s";
После чего механизм проверки типов в printf снова вернется к работе во время компиляции.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2015, 11:58     Могут ли теоретически существовать методы с неопределенным числом аргументов?
Еще ссылки по теме:

Инициализация std::tuple переменным числом аргументов - C++
Добрый вечер. Мне нужно инициализировать объект std::tuple, который является членом некоторого другого шаблонного класса с переменным...

Шаблон с переменным числом аргументов, и возвращаемое значение функции - C++
Здравствуйте! Использую С++11. Хочу возвращать элементы кортежа пытаюсь так, auto Deserialize(unsigned long long i) -&gt;...

Как изменить значение переменной, переданной в списке с переменным числом аргументов - C++
Помогите!!! Начал изучать С++ Возникла такая проблема. Когда мне нужно получить доступ к переменному числу аргументов я делаю что-то...

Теоретически понимаю, а как записать - непойму - C++
дан массив случайных чисел B. все необходимые с ним действия сделала. кроме одного.. Нужно записать элементы массива B (50) с индексами...

Как теоретически (не программно) посчитать количество сравнений и обменов в пузырьковой сортировке? - C++
как теоретически посчитать количество сравнений и обменов в пузырьковой сортировке?не программно


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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17533 / 5771 / 369
Регистрация: 30.03.2009
Сообщений: 15,872
Записей в блоге: 26
03.08.2015, 11:58     Могут ли теоретически существовать методы с неопределенным числом аргументов? #20
Цитата Сообщение от Tulosba Посмотреть сообщение
А вот на C++ правильно объявить указатель на строку формата
А кто тебе сказал, что форматная строка является константной? Она точно так же может генерироваться в runtime
Yandex
Объявления
03.08.2015, 11:58     Могут ли теоретически существовать методы с неопределенным числом аргументов?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru