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

Каковы основные цели использования std :: forward и какие проблемы он решает?
В идеальной пересылке std::forward используется для преобразования именованных ссылок rvalue t1 и t2 в безымянные ссылки rvalue. Какова цель этого? Как это повлияет на вызываемую функцию inner , если мы оставим t1 & t2 как lvalues?...
83583 просмотров

Почему std::forward отбрасывает constexpr-ness?
Будучи не объявленным constexpr , std::forward отбрасывает constexpr-ness для любой функции, в которую он пересылает аргументы. Почему std::forward не объявлено constexpr само по себе, чтобы сохранить constexpr-ness? Пример: (проверено с...
1286 просмотров

Аргумент шаблона rvalue неявно используется как lvalue, и работает std::forwarding
Этот пример использования std::forward меня озадачивает. Это моя отредактированная версия: #include <iostream> #include <memory> #include <utility> using namespace std; struct A{ A(int&& n) { cout <<...
412 просмотров

Обоснование неявного копирования и перемещения конструктора С++?
Мое понимание конструктора неявного копирования С++ похоже на T(T const& x) : base1(x), base2(x) ... , var1(x.var1), var2(x.var2)... {} Конструктор перемещения, задание копирования и перемещения также следуют аналогичному...
632 просмотров

Зачем нужны правила сворачивания ссылок
Все могут знать, что мы используем rvalue-ссылки в сочетании с правилами свертывания ссылок для создания идеальных функций пересылки, например так template<typename T> void f(T&& arg) { otherfunc(std::forward<T>(arg)); }...
896 просмотров

Почему я не могу вернуть unique_ptr из пары?
Почему я не могу вернуть unique_ptr из пары? #include <iostream> #include <memory> #include <utility> using namespace std; unique_ptr<int> get_value() { pair<unique_ptr<int>, int>...
2815 просмотров

Переадресация в конструктор на месте
У меня есть класс сообщений, с которым раньше было немного сложно работать, вам нужно было создать класс сообщений, указать ему выделить пространство для вашего объекта, а затем заполнить пространство либо путем построения, либо по элементам. Я...
1011 просмотров
schedule 23.05.2023

Это универсальная ссылка? Имеет ли здесь смысл std::forward?
Рассмотрим этот фрагмент кода, в котором используется общепринятая идиома: шаблон функции создает экземпляр шаблона класса, специализированного на выведенном типе, как видно из std::make_unique и std::make_tuple , например: template...
1079 просмотров

Какое правильное ограничение enable_if для идеального установщика переадресации?
Назад к основам! Презентация Essentials of Modern C++ на CppCon обсудила различные варианты передачи параметров и сравнила их производительность с простотой написания/обучения. «Расширенный» вариант (обеспечивающий наилучшую производительность во...
1544 просмотров

Правильное использование for_each_arg — слишком много переадресации?
Я очень рад, что обнаружил for_each_arg(...) , который значительно упрощает работу с пакетами аргументов. template<class F, class...Ts> F for_each_arg(F f, Ts&&...a) { return...
364 просмотров

В std::forward как он принимает rvalue?
Глядя на страницы 200-201 Effective Modern C++ Скотта Мейера, предлагаемой упрощенной реализацией std::forward может быть (правильная реализация была замечена в другом месте): template <typename T> T&&...
226 просмотров
schedule 26.03.2023

Идеальный элемент контейнера для пересылки
Аналогично этому вопросу , но вместо идеального пересылающего члена объекта я хотел бы знать, как усовершенствовать пересылку элементов контейнера STL, т.е. аналогично struct X {}; void f(X&); void f(X&&); template <typename...
940 просмотров
schedule 10.07.2022

SFINAE enable_if для шаблона идеальной пересылки с переменным числом аргументов при константности ссылки/указателя
Я хочу создать вариативную оболочку make_shared<T> с идеальной переадресацией, но такую, которая SFINAEd в зависимости от того, принимает ли конструктор T какие-либо неконстантные аргументы ссылки/указателя. Идея состоит в том, чтобы иметь...
292 просмотров

std::forward и конструктор копирования
Недавно начал изучать C++. И у меня есть вопрос по std::forward со ссылкой на lvalue и ссылкой на rvalue. Насколько я понимаю, Func(mc) в следующем коде предполагает вызов Func(T& t) из-за правила вывода параметров шаблона. И конструктор...
1383 просмотров
schedule 08.06.2023

Когда я должен std::forward вызывать функцию?
Фрагмент кода, который я видел в Effective Modern C++ , имеет умную реализацию инструментального обоснования для создания функция таймера : auto timeFuncInvocation = [](auto&& func, auto&&... params) { start...
3030 просмотров

Универсальный ссылочный аргумент используется дважды
Я хочу создать оболочку вокруг std :: make_pair, которая принимает один аргумент и использует этот аргумент для создания первого и второго членов пары. Кроме того, я хочу воспользоваться семантикой перемещения. Наивно, мы могли бы написать...
168 просмотров
schedule 25.09.2023

Как реализовать идеальную переадресацию для неуниверсального типа?
скажем, у меня есть следующий код: class Element; typedef shared_ptr<Element> ElementPtr; class Element { public: void add_child(const ElementPtr& elem); private: vector<ElementPtr> children; } inline void...
339 просмотров

Конструктор C++: идеальная переадресация и перегрузка
У меня есть два класса, A и B, и B является производным от A. A имеет несколько конструкторов (2 в приведенном ниже примере). B имеет один дополнительный элемент для инициализации (который имеет инициализатор по умолчанию). Как добиться того,...
11487 просмотров

Идеальная переадресация с временной оболочкой функции
Рассмотрим следующий код в C++14 , следуя сообщениям здесь , здесь и здесь : // Include #include <tuple> #include <iostream> #include <type_traits> // Temporary function queue declaration template <class... F> class...
694 просмотров

Почему для пересылки ссылок необходим std :: forward
В таком шаблоне функции template <typename T> void foo(T&& x) { bar(std::forward<T>(x)); } Разве x не является ссылкой на rvalue внутри foo , если foo вызывается со ссылкой на rvalue? Если foo вызывается со ссылкой...
1282 просмотров