Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.71
Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
#1

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

14.08.2012, 14:11. Просмотров 3015. Ответов 32
Метки нет (Все метки)

РАСПАКОВКА
есть ли способы кроме рекурсии и передачи как списка инициализации?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2012, 14:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переменное число аргументов (C++):

Переменное число аргументов - C++
Есть такой код. Хочу сделать, чтобы operator() принимал переменное число аргументов переменных типов. Т.е. передаём template<int,...

Переменное количество аргументов в функции ( зацикливание ) - C++
Здравствуйте. Подскажите пожалуйста как правильно огранизировать доступ к каждому параметру. Заранее спасибо. Вот код: #include...

Программа должна читать из консоли переменное количество аргументов и выводить их - C++
Программа должна читать переменное кол-во аргументов из командной строки и выводить их в виде "Hello, arg!" . Ф-я main() принимает два...

Переменное число параметров шаблона - C++
Здоровеньки булы. Не уверен, что название темы точно отражает суть вопроса. Есть заготовка шаблонного делегата, параметры которого -...

Переменное число параметров функции - трабл с int - C++
Функция - выводит среднее арифметическое своих аргументов. Рабочий пример с double: #include <cstdarg> #include <iostream> double...

Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? - C++
Я конечно, понимаю, что на такие вопросы отвечают "почитай книжку". Я читала, честное слово:) Конкретно. Есть функция void jacobi (...

32
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.08.2012, 18:10 #2
stdarg.h
0
Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
14.08.2012, 18:47  [ТС] #3
Jupiter, va_list и прочее не в счет. можно удалить. я уж прочитал что нельзя особо использовать. в других языках это полноценный класс и с ним можно работать. в ++ пока не так
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
14.08.2012, 19:45 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Pure, tuple может помочь. или typelist как у Александреску. А так, развертка шаблонов с переменным числом аргументов возможна только через рекурсивные вызовы.
0
Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
14.08.2012, 20:55  [ТС] #5
ForEveR, я все таки имел ввиду следущее

ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
function test (...Arg:Array):void {
                    
                trace(Arg.indexOf("privet"));               
                Arg.sort();             
                trace(Arg); 
                var ss:String= Arg.join("___");
                trace(ss);
                
                }
            
            test("ghbdtn", 56, "yyy", 67, "privet", "AAAA");
выход будет
4
56,67,AAAA,ghbdtn,privet,yyy
56___67___AAAA___ghbdtn___privet___yyy
в AS3 этот самый переменный список аргументов является полноценным классом с кучей методов и неплохими возможностями использования.
это все к тому что увидев возможность задавать переменный список аргументов и при этом все это присваиватеся некой "переменной", подумалось "а вдруг". Но нет. Пока нет для С++. Хотя и так предостаточно возможностей понадобавляли
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
14.08.2012, 21:03 #6
Pure, Да, почитай документ на эту тему. https://github.com/boostcon/cppnow_p...ith_tuples.pdf
0
Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
14.08.2012, 21:06  [ТС] #7
ForEveR, да кортежи похожи на это. но конкретно зарядить список перменных аргументов в кортеж внутри тела функции сможешь? Я что то нынче поковырялся и забросил. Если появиться желание и это можно сделать то накидай плиз. будет полезно посмотртеь думаю.
что то вроде
C++
1
2
3
4
5
6
7
8
9
10
template <typename ...Arg> void test (Arg ... arg)
{
 
auto tup =  std::make_tuple (arg....);
 
int siz = sizeof...(Arg);
 
for(int i=0;i<siz;++i)
std::cout<<std::get<i>(tup);
}
сразу скажу что это по любому не соберется хотя бы потому что get требует константу, ну и прочее прочее прочее
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
14.08.2012, 21:27 #8
Да дело всё в том, что в Си++ в рантайме нет шаблонов. Если их надо иметь, то это (по идее) надо городить какую-то штуку, которая (рекурсивно с помощью шаблонной магии во время компиляции) соберёт все аргументы в какой-нибудь vector<Variant>, а потом уже в функции разбираться с этим вектором и сохранёнными внутри метками типов.

Хотя и шаблоны не могут при определении своих же шаблонных параметров использовать свои же шаблонные параметры. Так что я даже сомневаюсь, что это можно сделать.
0
-=ЮрА=-
14.08.2012, 21:34
  #9

Не по теме:

Pure, можешь для "тупого Юры", объяснить что ты потом со своим списком и числом аргументов хочешь делать?(тобишь на кой оно тебе надо и как хочешь чтоб работало, в тёх словах нарисуй)

1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
14.08.2012, 21:50 #10
Pure, Ну вот тут довольно интересно к примеру.
http://stackoverflow.com/questions/1...les-in-c11-stl
0
OhMyGodSoLong
14.08.2012, 22:34
  #11
6
-=ЮрА=-
Заблокирован
Автор FAQ
15.08.2012, 00:47 #12
Вот то что вышло у меня
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <vector>
#include <string>
#include <sstream>
#include <typeinfo>
#include <iostream>
using namespace std;
 
struct Argument
{
    string stype;
    string value;
};
 
class CArgList
{
private:
    int i;
    vector<Argument> vec;
    vector<Argument>::iterator it;
public:
    CArgList()
    {
        i = 0; 
        vec.empty();
    }
    template <typename T>
    bool operator <<(T arg);
    bool operator >>(Argument &pArg);
};
 
template <typename T>
bool CArgList::operator <<(T arg)
{
    Argument pArg;
    stringstream ss;ss<<arg;
    pArg.stype    = typeid(T).name();
 
    bool flag = true;
    if(ss>>pArg.value)
        vec.push_back(pArg);
    else
        flag = false;
    return flag;
}
 
bool CArgList::operator >>(Argument &pArg)
{
    bool flag = true;
    if(vec.begin() + i < vec.end())
    {
        it = vec.begin() + i;
        pArg = (*it);
        i  = i + 1;
    }
    else
        flag = false;
    return flag;
}
 
int main()
{
    CArgList pArgList;
    pArgList<<23;
    pArgList<<":";
    pArgList<<37;
    pArgList<<"YurA done it";
    Argument pArg;
    while(pArgList>>pArg)
        cout<<pArg.stype<<" - "<<pArg.value<<endl;
    return 0;
}
Единственное с перегрузкой << не до конца доработал, но в целом мне нравиться, да и кода мало
http://liveworkspace.org/code/2e6b057eedc390063b068d853e89f43f
Отработка
i - 23
PKc - :
i - 37
PKc - YurA
0
Миниатюры
Переменное число аргументов  
Jupiter
15.08.2012, 00:59
  #13

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
что ты потом со своим списком и числом аргументов хочешь делать?
-=ЮрА=-, резонный вопрос, только лучше вы бы на этом и остановились

Цитата Сообщение от Pure Посмотреть сообщение
в AS3
почему не пишешь на AS3 ?! тратишь время на какие-то плюсы со статической типизацией!

0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
15.08.2012, 01:13 #14
Цитата Сообщение от Pure Посмотреть сообщение
в AS3 этот самый переменный список аргументов является полноценным классом с кучей методов и неплохими возможностями использования.
это все к тому что увидев возможность задавать переменный список аргументов и при этом все это присваиватеся некой "переменной", подумалось "а вдруг". Но нет. Пока нет для С++. Хотя и так предостаточно возможностей понадобавляли
мне кажется ты не понимаешь разницы между динамическими кортежами (run-time) в AS3 и статическими кортежами (compilation-time) в с++
те к примеру AS3 скорее всего ближе контейнер с stl-вским алгоритмом (с лямбдой)

те то что у тебя в AS3 написано ближе к std::vector<boost::any>, чем к tuple'ам
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
15.08.2012, 08:16 #15
-=ЮрА=-, Какое отношение имеет к шаблоном с переменным кол-вом аргументов?
Да и какой смысл было писать это, когда есть boost::any или что-нибудь в этом роде?
0
15.08.2012, 08:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2012, 08:16
Привет! Вот еще темы с ответами:

Разработать функцию, возвращающую сумму остатка от деления первого и второго аргументов на заданное число - C++
Разработать функцию типа int, что возвращает сумму остатка от деления первого и второго аргументов на 5, если сумма больше 20, иначе...

Написать функцию, которая получает в качестве аргументов целое положительное число и систему счисления - C++
Всем Здравствуйте, Дамы и Господа. Вот получил такое задание. но что-то вообще не понимаю. Написать функцию, которая получает в...

Составить функцию, принимающую переменное количество параметров - C++
Напишите и протестируйте шаблонную функцию с переменным числом аргументов sum_values(), которая принимает список произвольной длины с...

Можно ли в цикле for устанавливать переменное значение инициализатора? - C++
Ну вот мне позарез надо сделать так: int j=(23-posl); for (i=j;i&gt;=0;i--) cout &lt;&lt; c; так нельзя? а мне очень нужно. что можно...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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