Вопросы по теме 'perfect-forwarding'

Правильный способ использования decltype в качестве завершающего возвращаемого типа
Я очень часто вижу пример такой формы: template <typename T, typename U> auto add(T&& t, U&& u) -> decltype(std::forward<T>(t) + std::forward<U>(u)) { return std::forward<T>(t) +...
1558 просмотров

Почему идеальная функция переадресации должна быть шаблонной?
Почему следующий код действителен: template<typename T1> void foo(T1 &&arg) { bar(std::forward<T1>(arg)); } std::string str = "Hello World"; foo(str); // Valid even though str is an lvalue foo(std::string("Hello World")); //...
4221 просмотров
schedule 13.05.2022

В чем разница между std::move и std::forward
Я видел это здесь: Конструктор перемещения, вызывающий конструктор перемещения базового класса Может кто-нибудь объяснить: разница между std::move и std::forward , желательно с примерами кода? Как легко думать об этом, и когда что...
44144 просмотров
schedule 24.07.2022

Могу ли я обычно / всегда использовать std :: forward вместо std :: move?
Я смотрел Скотта Мейерса поговорим об универсальных справочниках с конференции C ++ and Beyond 2012, и пока все имеет смысл. Однако примерно через 50 минут один из зрителей задает вопрос, который меня тоже интересовал. Мейерс говорит, что его не...
7695 просмотров

Каков наилучший способ переименования (псевдоним/вперед) функции в С++?
(Я ограничу этот вопрос С++ 11, так как считаю, что в С++ 98 нет общего способа сделать это). Предположим, у меня есть сложный (с точки зрения подписи) набор функций template и/или перегруженных функций, и я хочу использовать эти функции точно...
3061 просмотров

есть ли разница между std::forward‹T› и std::forward‹decltype(t)›?
эквивалентны ли эти функции? template <class T> void foo(T && t) { bar(std::forward<T>(t)); } template <class T> void foo2(T && t) { bar(std::forward<decltype(t)>(t)); } template <class T>...
2368 просмотров
schedule 12.11.2023

Зачем использовать идеально переданное значение (функтор)?
В C++11 (и C++14) представлены дополнительные языковые конструкции и усовершенствования, предназначенные для универсального программирования. К ним относятся такие функции, как; Ссылки R-значения Ссылка сворачивается Идеальная переадресация...
1794 просмотров
schedule 20.01.2024

Правильное использование идеальной переадресации в С++?
Интересно, является ли следующее правильное использование идеальной переадресации в С++ (объяснение ниже): class A { public: //... template <typename T> A( T&& b,const C& c ) : _b{ std::forward<T>( b ) },_c{ c } { }...
125 просмотров
schedule 09.01.2024

Как вставить/поместить на карту, чтобы не создавать временные объекты?
Я читаю рекомендацию из одной из книг С++ 11 предпочесть emplace вместо insert при добавлении элементов в контейнер, чтобы избежать создания временных объектов (вызовы конструкторов/деструкторов вставляемых объектов). Но я немного сбит с толку,...
648 просмотров
schedule 24.07.2023

Работа std::forward и свертывание ссылок
Я пытаюсь ознакомиться с концепцией совершенной переадресации. Я прочитал это и этот пост здесь. Я считаю, что мне также нравится концепция сворачивания ссылок. Читая этот другой пост. у меня возник следующий вопрос Предположим, у нас...
238 просмотров
schedule 24.06.2022

Захват общих вызываемых объектов во вложенных лямбдах - всегда вперед?
В моей кодовой базе есть различные функции, которые берут общий вызываемый объект и передают его ряду вложенных лямбда-выражений перед его вызовом. Пример: template <typename TF> void interface(TF&& f) { nested0([/*...*/]()...
217 просмотров

c++: несколько перемещений по одному и тому же объекту и идеальная переадресация
В этом вопросе я говорил о том, как создать многофункциональный мемоизатор. В одном из ответов было предложено реализовать perfect forwarding, поэтому передача аргументов в нужную функцию выйдет недорого, вот так: template <typename...
208 просмотров
schedule 10.12.2022

Идеальная переадресация функций для создания класса списка функций
Рассмотрим следующий код, который создает класс, хранящий функции. // Function list class template <class... F> struct function_list { template <class... G> constexpr function_list(G&&... g) noexcept :...
380 просмотров

Выведение аргумента шаблона из строкового литерала
В настоящее время я думаю о том, как лучше всего ограничить общий тип шаблона std::sting , а также строковыми литералами. Поэтому я сравниваю выведенный тип с желаемым типом, используя std::is_same . В случае std::string это работает сразу. Для...
1061 просмотров

невозможно связать неконстантную ссылку lvalue типа 'int&' с rvalue типа 'int'
Следующий код не компилируется: #include <iostream> using namespace std; int add2(const int& x) { return x + 2; } template <typename T> T add2T(T&& x) { return add2(std::forward<T>(x)); } int main(int...
7592 просмотров
schedule 07.03.2022

В каких сценариях назначение из std::forward предпочтительнее, чем назначение из std::move ? Зачем?
Узнав о std::exchange на cppreference.com , я наткнулся на его "возможную реализацию ", который вставлен ниже. template<class T, class U = T> T exchange(T& obj, U&& new_value) { T old_value = std::move(obj);...
90 просмотров
schedule 15.07.2022

Могу ли я инициализировать std :: vector по списку с идеальной пересылкой элементов?
Я заметил, что инициализация aggregate list для std :: vector выполняет инициализацию копирования , когда более применимо перемещение . В то же время несколько emplace_backs делают то, что я хочу. Я мог придумать только это несовершенное...
266 просмотров

Идеальная передача параметров функции в указатель на функцию: как насчет передачи по значению?
У меня есть структура данных, которая обеспечивает доступ к своим элементам, и некоторая логика цикла для того, как их перебирать. Мне нужно вызывать разные функции внутри цикла(ов). Все эти функции принимают элемент данных в качестве первого...
70 просмотров

Perfect Forward с использованием std::forward против RefRefCast
Буду признателен за помощь в понимании реализации std::forward. В чем разница между std::forward и стандартным приведением к T&& в функции шаблона? По крайней мере, в этом примере они оба правильно выполняют пересылку. LValue перенаправляется в...
51 просмотров

подтолкнуть объект к вектору после прохождения через функцию преобразования
Я хочу вставить функцию преобразования (вероятно, std::function) для изменения объекта, который помещается в std::vector. Я хотел бы, чтобы объект создавался на месте и проходил через функцию без создания дополнительных копий. Допустим, я делаю...
51 просмотров
schedule 11.05.2024