63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

Variadic templates

30.05.2020, 15:19. Показов 1786. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
template<class F, class... Args>
auto ThreadPool::enqueue(F&& f, Args&&... args) 
    -> std::future<typename std::result_of<F(Args...)>::type>

что происходит в месте
C++
1
f<F(Args...)>
в функцию которая является 1 параметром передают в качестве аргуменов развернутый пакет типов шаблона, как это должно работать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.05.2020, 15:19
Ответы с готовыми решениями:

Variadic Templates - как обращаться к аргументам variadic-функции?
Всем привет! Наверное, рано мне ещё с моими скудными знаниями в это лезть, но, изучив шаблоны и вариадик-функции, я, естественно, горю...

Variadic templates
typedef function&lt;double(double ...)&gt; fun; inline int sum() { return 0; } template &lt;typename ... Types&gt; double sum(double...

Variadic templates
Как обращаться напрямую к элементам Args? template&lt;typename... Args&gt;

28
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
30.05.2020, 19:29  [ТС]
Студворк — интернет-сервис помощи студентам
DrOffset, ну вот пример
C++
1
2
3
4
template <typename F, typename T1, typename T2> void flip2(F f, T1 &&t1, T2 &&t2)
{
f(t2, t1) ;
}
здесь если передать в функцию flip2 rvalue вторым аргументом то он превратится в lvalue в теле функции , это будет так же работать с шаблонами?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
30.05.2020, 19:32
Цитата Сообщение от ReYalp Посмотреть сообщение
это будет так же работать с шаблонами?
Что значит "это будет так же работать с шаблонами", если ваш пример и так с шаблоном?
0
30.05.2020, 19:34

Не по теме:

Читаю и реакция только одна :facepalm:
ТС издевается над сообществом. Хватит с ним нянчиться, пусть идет книжки читает!
На работу устроится - вы тоже будете за него все пережёвывать и в рот класть? Если не получается самостоятельно базовый материал осваивать, значит не ту профессию выбрал и всё.

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.05.2020, 19:47
Цитата Сообщение от ReYalp Посмотреть сообщение
а влияет это как-то на lvalue и rvalue?
нет

Цитата Сообщение от ReYalp Посмотреть сообщение
Ведь если у объекта нету имени то это rvalue, но параметр функции это lvalue
это так только в контексте выражений.

параметры функций всегда lvalue.

Цитата Сообщение от ReYalp Посмотреть сообщение
(F&& f, Args&&... args)
здесь у всех параметров есть имена.
первый параметр: f
дальше идет список параметров: args


пример безымянных параметров:

C++
1
2
3
4
template<class T, class... Args>
void foo(T&&, Args&&...)
{
}
что характерно: если у параметра нет имени,
то изнутри функции ты никак честным способом не сможешь получить к нему доступ.
(на самом деле это возможно, но не по стандарту)

вот например, взять первый параметр: T&&
он вроде бы есть.
но доступа к нему у тебя нет.

какая тебе вообще разница, что он из себя представляет,
если у тебя все равно нет к нему доступа?

с паком все тоже самое.
если у пака есть имя, то ты сможешь получить доступ к любому из его элементов.
а если нету - на нет и суда нет.
1
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
30.05.2020, 20:18  [ТС]
hoggy, вот из книги :
C++
1
2
template<typename T,typename... Args>
 ostream & print(ostream &os, const T &t, const Args&... rest)
при вызове
C++
1
print(cout, i , s, 42);
создаст экземпляр

C++
1
ostreams& print(ostream&, const int&, const string&  , const int&);
здесь видно что автор не дает имена параметрам.
Если в теле функции вызвать другую функцию например
C++
1
f(rest)...
то получится что эта функция вызывается с каждим параметром функции print из пакета rest.

но как тогда этот вызов будет происходить если у параметров нету имен? Или они должны быть?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.05.2020, 20:49
Цитата Сообщение от ReYalp Посмотреть сообщение
получится что эта функция вызывается с каждим параметром функции print из пакета rest.
ога.

Цитата Сообщение от ReYalp Посмотреть сообщение
но как тогда этот вызов будет происходить если у параметров нету имен?
вот у тебя на руках есть список строк:
std::vector<std::string> vec;

ты знаешь как получить доступ к первому элементу?
а ко второму?


у компилятора на руках есть список параметров.
ты не понимаешь, как компилятор может взять параметр из списка,
и подсунуть его функции f?
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
30.05.2020, 21:13  [ТС]
hoggy, а когда компилятор создаёт подобный экземпляр он даёт параметрам имена?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
30.05.2020, 21:16
ReYalp, при задании сигнатуры имена дают для наглядности, но они не обязательны:
C++
1
void bar(int,int,double, char*const);
Тип функции или сигнатура вызывабельного типа определяется именно типами и порядком следования. ReYalp, есть подозрение, что вы зажмурясь произносите наощупь. Это не путь к победе. Нужно в корне изменить стиль отноше6ния к материалу.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.05.2020, 21:58
Цитата Сообщение от ReYalp Посмотреть сообщение
когда компилятор создаёт подобный экземпляр он даёт параметрам имена?
ты задаешь неверные вопросы.

правильные вопросы звучат так:
а нахрена они ему нужны?
зачем вообще параметру может быть нужно имя?

имена параметров нужны программисту, а не компилятору.

вот например:
C++
1
2
3
4
void foo(int arg1, int arg2)
{
    std::cout << arg1; // <--- здесь ты захотел вывести значение параметра в консоль
}
но ты не обязан указывать имена параметров.

C++
1
2
3
4
void foo(int, int)
{
    std::cout << ????  вот только что ты здесь тогда напишешь ??? 
}
телепаты в отпуске.
если ты не указал имен, то как по твоему, компилятор должен догадаться,
какой именно параметр ты имеешь ввиду?

ответ на твой вопрос:
нет, не даёт.
имена придумывает программист.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2020, 21:58

Variadic templates
А как бы так исхитриться, чтобы шаблонная функция, использующая Variadic templates узнала размер передаваемых ей параметров с тем, чтобы,...

Variadic templates
1. как можно сделать чтобы передавались ссылки на переменные? (с variadic templates) 2. как вообще обращаться к переменным объявленным...

Variadic Templates
проблема только в переводе на русский, обычно это &quot;Шаблоны с переменным числом аргументов&quot; но такое длинное выражение долго не...

Variadic templates
как можно сделать чтобы функция принимала бесконечное количество объектов std::string? (только их) я пробовал вот так: template&lt;const...

Result_of + variadic templates
Как здесь можно вывести возвращаемый тип функторов? res_t должен получиться типом которым они параметризуются.template &lt;typename ......


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

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

Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru