Описание тега stdapply

Функция std::apply() C++ 17 принимает функцию и кортеж и вызывает функцию с содержимым кортежа в качестве аргументов.
2 ответа

Как std:: применять параметры forward без явного std::forward?

Рассмотреть возможность реализации std::apply: namespace detail { template <class F, class Tuple, std::size_t... I> constexpr decltype(auto) apply_impl(F &&f, Tuple &&t, std::index_sequence<I...>) { return std::invoke(std…
21 дек '16 в 10:34
3 ответа

std::apply и константное выражение?

Я попробовал код ниже в Wandbox: #include <array> #include <iostream> #include <tuple> #include <typeinfo> #include <functional> #include <utility> int main() { constexpr std::array<const char, 10> str{"1234…
12 ноя '16 в 04:55
1 ответ

Перенаправить скопированный std::tuple

Мне нужна помощь. Мне нужно совершенным образом переслать кортеж определенным образом. Представь себе это template <typename F, typename... Args> auto package_task(F&& func, Args&&... args) -> std::function<void()> { /…
25 сен '18 в 18:53
2 ответа

Использование std::apply с различными пакетами

Я пытаюсь создать универсальный класс, который принимает пакет типов, сохраняет их в кортеже и может применять к ним функцию. То, что я пробовал до сих пор, это следующее: #include <tuple> struct Base{ virtual void base_function() = 0; }; temp…
11 фев '19 в 13:21
1 ответ

Применение переменной функции с помощью std::apply

Можно ли применить переменную функцию к кортежу с помощью std::apply? Например, следующий код прекрасно работает с GCC 6.2.1: void print_t(std::string i, std::string j) { std::cout << i << " " << j << std::endl; } int main() …
10 ноя '16 в 08:48
1 ответ

std::get не пересылает ссылку на rvalue для std::apply

Мне интересно почему std::apply не пересылает rvalue-referenceпри работе со ссылочными типами в кортежах (см. Live): #include <type_traits> #include <tuple> template<typename T> void assertRvalueReference(T&& t) { static_as…
03 янв '20 в 16:04
0 ответов

Использование std::apply для кортежа в шаблонной функции

Я пытаюсь запрограммировать класс контейнера данных, который содержит данные в нескольких векторах. По задумке, у него есть только один вектор каждого типа, один для целых чисел, один для чисел типа double и так далее. Я хотел бы "загрузить" данные …
03 сен '20 в 20:01
2 ответа

std::visit std::variant с перегруженной свободной функцией вместо объекта-функции

В C++17 есть простой способ std::visit варианта с перегруженной бесплатной функцией или я должен использовать объект с перегруженным оператором вызова? Другими словами, можно ли добавить что-нибудь простое, чтобы сделать следующее //ERROR! line, что…
1 ответ

Как у вас может быть несколько строк или операторов внутри расширения пакета C++?

Предположим, у меня есть простой код, подобный приведенному ниже, который просто печатает все значения в кортеже и отслеживает текущую итерацию. #include <iostream> #include <tuple> #include <utility> using std::cout; int main() { …
02 окт '20 в 00:44
1 ответ

C++: использование std::apply для перебора кортежа в двух частях: до индекса, применяющего лямбда, и затем после индекса, применяющего другую лямбда

Если я хочу перебрать кортеж, используя std::apply но не применять одну функцию ко всему, как я могу разделить кортеж, т.е. применить одну функцию к первой n значения и другой для всех значений после него? some_values будет кортеж, который может име…
25 сен '20 в 01:25
0 ответов

Как реализовать что-то вроде std :: apply в C ++ 11?

Есть ли способ реализовать std::apply в c ++11? у меня есть std::tuple<Args...> myTuple и std::function<void(const Args&...)> myFunction Как я могу вызвать myFunction и передать ему содержимое myTuple в качестве аргументов в C++11?
19 май '21 в 23:52
1 ответ

Должен ли std:: apply применяться только к std:: tuple?

Сигнатура функции не ограничивает параметр шаблона Tupleбыть специализацией, поэтому он все еще может принимать объекты , подобные кортежу, которые определяют std::tuple_size_v(Godbolt ): #include <tuple> #include <utility> #include <…
11 сен '21 в 13:36
2 ответа

Невозможно использовать std::apply для пользовательских типов

При реализации compressed_tupleclass для какого-то проекта, над которым я работаю, я столкнулся со следующей проблемой: я не могу передать экземпляры этого типа в std ::apply, хотя это должно быть возможно в соответствии с: https://en.cppreference.c…
17 сен '21 в 04:56
3 ответа

Использование std::apply в методе класса

Я пытаюсь скомпилировать следующее (g++-11.2, C++20), но получаю: error: no matching function for call to '__invoke(std::_Mem_fn<void (Foo::*)(int, double)>, std::__tuple_element_t<0, std::tuple<int, double> >, std::__tuple_element…
24 окт '21 в 07:29
3 ответа

Инициализация интеллектуальных указателей в кортеже без знания типа

У меня есть кортеж интеллектуальных указателей (как член шаблона класса), который мне нужно инициализировать. Я использую std::apply для перебора кортежей в другом месте, но как мне инициализировать их новыми объектами, не зная их типа? Выполнение п…
15 сен '21 в 17:06
1 ответ

std::function vs вызываемый как параметр шаблона

Почему в приведенном ниже примере строка 20 вызывает ошибку, описанную в строках с 27 по 30? Вызов exec1в строке 33 работает нормально. #include <cstdint> #include <functional> #include <iostream> #include <tuple> #include &l…
2 ответа

Как я могу поэлементно назначить кортеж, используя выражения сгиба?

У меня есть тип, эффективно обертывающий вариативныйstd::tupleтак: #include <iostream> #include <tuple> template <typename ...Args> struct Foo { std::tuple<Args...> t; Foo(Args&&... a) : t{ std::forward<Args>(a)…
08 июн '22 в 15:54
0 ответов

std::apply-ing sscanf в кортеж, кортеж не обновляется полностью

У меня есть структурированная строка данных, и я хочу разобрать ее в кортеж. Для каждого типа входной строки типы и расположение данных могут быть разными, поэтому я хочу использовать шаблоны и форматы scanf, чтобы избежать необходимости управлять в…
23 фев '23 в 19:24
1 ответ

необъяснимое предупреждение при использовании std::apply для пустого кортежа с msvc

У меня есть предупреждение о переменной, на которую нет ссылки, при использовании std::apply для пустого кортежа. Этот фрагмент, вдохновленный std::apply cppreference, показывает проблему: #include <iostream> #include <tuple> #include &l…
19 июн '23 в 12:33
1 ответ

установите значение в std::tuple, используя функцию, которая принимает индекс std::get

Если вы хотите прочитать данные из вектора std::tuple, вы можете использовать: #include <algorithm> #include <iostream> #include <sstream> #include <tuple> #include <variant> #include <vector> using example = std:…
22 авг '23 в 20:53