Size: a a a

2020 August 01

AK

Anton Kviatkovskii in supapro.cxx
dekabr
есть функция 1 вида f(int a, float b, char c) {}
и есть функций 2 вида f(float b){}
как сконструировать функцию которая будет принимать аргументы как у 1 и форвардить соответствующие по типам аргументы во вторую ?
а кол-во параметров в функции 1 вида заранее известно?
источник

d

dekabr in supapro.cxx
ну в моем  частном случае да и если решается для общего трудно то меня вполне устроит и частное
источник

AK

Anton Kviatkovskii in supapro.cxx
Энивей
f1 - изначальная
f2 - визитор
template <typename ... Args>
void f1(Args... args) {
 (..., f2(args));
}
источник

AK

Anton Kviatkovskii in supapro.cxx
dekabr
ну в моем  частном случае да и если решается для общего трудно то меня вполне устроит и частное
^
источник

d

dekabr in supapro.cxx
загадочный синтаксис я попробую спасибо
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
dekabr
есть функция 1 вида f(int a, float b, char c) {}
и есть функций 2 вида f(float b){}
как сконструировать функцию которая будет принимать аргументы как у 1 и форвардить соответствующие по типам аргументы во вторую ?
Что значит соотвествующие по типам? Сформулируй алгоритм
источник

D

Danya in supapro.cxx
Anton Kviatkovskii
Энивей
f1 - изначальная
f2 - визитор
template <typename ... Args>
void f1(Args... args) {
 (..., f2(args));
}
А зачем fold, если можно f2(args)...?
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Danya
А зачем fold, если можно f2(args)...?
Это так не работает
источник

d

dekabr in supapro.cxx
f1(int a, float b, char c) {}
f2(float b){}

f1 принимает float
f2 принимает float

значит f3 которая принимает аргументы как f1

f3(int a, float b, char c){
//передает float b в f2
f2(b);
}
источник

Е

Егор in supapro.cxx
Anton Kviatkovskii
Энивей
f1 - изначальная
f2 - визитор
template <typename ... Args>
void f1(Args... args) {
 (..., f2(args));
}
форвард потерялся
источник

C

CodeDetector in supapro.cxx
dekabr
f1(int a, float b, char c) {}
f2(float b){}

f1 принимает float
f2 принимает float

значит f3 которая принимает аргументы как f1

f3(int a, float b, char c){
//передает float b в f2
f2(b);
}
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
источник

D

Danya in supapro.cxx
Artöm Bakri Al-Sarmini
Это так не работает
???
источник

AK

Anton Kviatkovskii in supapro.cxx
Artöm Bakri Al-Sarmini
Это так не работает
Должно работать
источник

AK

Anton Kviatkovskii in supapro.cxx
Это раскроется в вызовы разделённые запятой
источник

AK

Anton Kviatkovskii in supapro.cxx
Собсна как и фолд
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Не в любом контексте можно распаковыватт пак. Такого я не помню
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Емнип когда я пробовал подобное (без фолда, то есть без ()), компилятор слал
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
dekabr
f1(int a, float b, char c) {}
f2(float b){}

f1 принимает float
f2 принимает float

значит f3 которая принимает аргументы как f1

f3(int a, float b, char c){
//передает float b в f2
f2(b);
}
Это сигнатуры для примера или они всегда такие?
источник

D

Danya in supapro.cxx
Artöm Bakri Al-Sarmini
Не в любом контексте можно распаковыватт пак. Такого я не помню
Посмотри лекцию Константина Владимирова про Variadic Templates
Он хорошо рассказывает как работает распаковка пака
источник

d

dekabr in supapro.cxx
Artöm Bakri Al-Sarmini
Это сигнатуры для примера или они всегда такие?
для примера
источник