#c #tuples
Вопрос:
Мне нужна функция My_func, которая работает следующим образом
auto f = [](const std::tuple<string, double>amp; t) { return std::get<0>(t); };
assert(My_func(f)("Hello", 8.5) == f({"Hello", 8.5}));
Теперь у меня есть
template <class F>
constexpr auto My_func(Famp;amp; f) {
return [f](autoamp;amp; args...) { return std::forward<F>(f)(args); };
}
Но это не работает.Что я должен исправить?
Ответ №1:
Прежде всего, вам нужно My_func
быть синтаксически корректным. У вас есть пакет args
, который не расширен в лямбде. Тогда вам нужно tuple
где-то упомянуть. C — это не экстрасенс.
К счастью, существует std::forward_as_tuple
то, что делает именно то, что вам здесь нужно
template <class F>
constexpr auto My_func(Famp;amp; f) {
return [f = std::forward<F>(f)](autoamp;amp; args...) { return f(std::forward_as_tuple(args...)); };
}
Ответ №2:
template <class F>
constexpr auto My_func(Famp;amp; f)
{
return [f = std::forward<F>(f)](autoamp;amp;... args) {
return f(std::make_tuple(std::forward<decltype(args)>(args)...));
};
}