Size: a a a

2021 February 16

d

d7d1cd in supapro.cxx
Danya
Функции надо принимать в шаблоне так:
template <typename Func>
void Method(Func func) {}

И ещё использовать forwarding reference, да
Начну с этого. Как при вызове Method передать параметры, которые должны будут быть переданы в func?
источник

D

Danya in supapro.cxx
d7d1cd
Начну с этого. Как при вызове Method передать параметры, которые должны будут быть переданы в func?
template <typename Func, typename Arg>
auto Method(Func func, Arg&& arg) -> decltype(func(std::forward<Arg>(arg))) {
   return func(std::forward<Arg>(arg));
}
источник

SH

Serhii Herashchenko in supapro.cxx
osm1um
Вы вообще джунами были? 🗿
ну хз, псевдокод на первом курсе университета дают
источник

d

d7d1cd in supapro.cxx
Danya
template <typename Func, typename Arg>
auto Method(Func func, Arg&& arg) -> decltype(func(std::forward<Arg>(arg))) {
   return func(std::forward<Arg>(arg));
}
Method должен возвращать значение, которое возвращает func.
источник

SH

Serhii Herashchenko in supapro.cxx
вернее примеры на псевдокоде
источник

SH

Serhii Herashchenko in supapro.cxx
нас вообще учили сначала как раз на нем описывать алгоритмы
источник

SH

Serhii Herashchenko in supapro.cxx
перед собственно, реализацией
источник

D

Danya in supapro.cxx
d7d1cd
Method должен возвращать значение, которое возвращает func.
Я исправил
источник

O

Ofee in supapro.cxx
d7d1cd
Method должен возвращать значение, которое возвращает func.
template <typename Func, typename Arg>
auto Method(Func&& func, Arg&& arg)
   noexcept(noexcept(std::forward<Func>(func)(std::forward<Arg>(arg))))
   -> decltype(std::forward<Func>(func)(std::forward<Arg>(arg)))
{
   return std::forward<Func>(func)(std::forward<Arg>(arg));
}
источник

D

Danya in supapro.cxx
Ofee
template <typename Func, typename Arg>
auto Method(Func&& func, Arg&& arg)
   noexcept(noexcept(std::forward<Func>(func)(std::forward<Arg>(arg))))
   -> decltype(std::forward<Func>(func)(std::forward<Arg>(arg)))
{
   return std::forward<Func>(func)(std::forward<Arg>(arg));
}
У него С++11
источник

d

d7d1cd in supapro.cxx
Danya
Я исправил
Ага, вижу. Спасибо. Пойду пробовать на своем компиляторе )). Щас вернусь с ошибкой какой-нибудь 😂.
источник

O

Ofee in supapro.cxx
Danya
У него С++11
Ну, тогда ещё строчку с decltype, как у тебя. Но Func тоже желательно форвардить
источник

d

d7d1cd in supapro.cxx
Как в godbolt задать 11 стандарт компилятору?
std = C++11 не пашет
источник

SS

Sergey Sobolev in supapro.cxx
-std=c++11
источник

o

osm1um in supapro.cxx
Serhii Herashchenko
ну хз, псевдокод на первом курсе университета дают
Ну не когда же объясняют архитектурные решения.
источник

SH

Serhii Herashchenko in supapro.cxx
osm1um
Ну не когда же объясняют архитектурные решения.
ну архитектурные решения обьясняют обычно всякими диаграмками там
источник

SH

Serhii Herashchenko in supapro.cxx
схемками
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
d7d1cd
Можете показать во что инстанциируется это:
template <class Ret, class... Args>
Ret Method(Ret (*callback)(Args...), Args&&... args);

В таком коде:
int foo(int, char);
Method(foo, 1, '2');
Не делай так. Передашь void(*)(int) и long и оно бомбанет. Либо делай FArgs... и Args..., либо оборачивай вторые Args в type_identity
источник

D

Danya in supapro.cxx
osm1um
Ну не когда же объясняют архитектурные решения.
Проще написать на псевдокоде, чем более менее рабочее на плюсах
источник

d

d7d1cd in supapro.cxx
Danya
У него С++11
Итак. Первая проблема. У меня в библиотеке нет std::forward. Попробовать свою реализацию написать?
источник