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

идеальная пересылка для lvalues
У меня есть служебная функция, которая выполняет итерацию по кортежу и для каждого элемента вызывает функцию с этим элементом и, наконец, вызывает другую функцию с результатом всех элементов кортежа. Чтобы лучше проиллюстрировать: Существует...
248 просмотров
schedule 09.09.2021

Слайды CppCon Perfect Forwarding от Herb Sutter
Мне сложно понять пару моментов, касающихся варианта идеальной переадресации, предложенного Хербом Саттером в его презентации " Назад к основам! Основы современного стиля C ++ " (@ 1: 15: 00) на CppCon 2014. Три соответствующих слайда ( вот слайды...
620 просмотров
schedule 05.10.2021

В каком случае всегда используется lvalue для доступа к члену ссылочного типа?
Почему не следует применять правило для доступа к членам класса с выражением объекта xvalue [expr] /7.3 к ссылочным типам? Вместе с [expr.ref] / 4 «Если объявлено, что E2 имеет тип« ссылка на T », тогда E1.E2 - это lvalue; тип E1.E2 - T.»...
98 просмотров

Подробно объясните std :: forward
Может кто-нибудь подробно объяснит мне, как работает std::forward . Как это определение кода и как он работает. Также, если возможно, вы можете показать, как работает функция и что она делает для ее работы. Объясните это как можно подробнее. Вот...
42 просмотров
schedule 28.11.2021

Я до сих пор не могу понять, зачем нам нужен шаблон для идеального fwd
У меня есть этот код: (живой, например: https://godbolt.org/z/js1qK9hd1 ) struct big_class { std::string s1; std::string s2; std::string s3; std::string s4; std::string s5; std::string s6; std::string s7; }; void...
61 просмотров
schedule 10.10.2021

make_unique и идеальная пересылка
Почему в стандартной библиотеке C ++ 11 нет шаблона функции std::make_unique ? я нахожу std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); немного многословно. Разве следующее не было бы лучше? auto p =...
70139 просмотров

Есть ли разница между универсальными ссылками и ссылками пересылки?
Аргумент этой функции будет привязан к ссылке rvalue: void f(int && i); Однако аргумент этой функции будет привязан либо к ссылке rvalue, либо к ссылке lvalue: template <typename T> void f(T && t); Я часто...
18715 просмотров

Почему конструктор перемещения вызывается дважды при передаче временных функций функции потока?
В приведенном ниже коде я не мог понять, почему конструктор перемещения класса вызывается дважды, учитывая, что моя функция потока принимает аргумент по ссылке rvalue, и поэтому я надеялся, что конструктор перемещения будет вызываться только один раз,...
172 просмотров

Нужно ли мне улучшать прямые аргументы в тех случаях, когда аргументы используются непосредственно в функции?
Я подумал про себя, что мне не нужен std::forward<T>(arg); в моей функции, потому что я не передавал аргумент другой функции, я использовал его напрямую. Однако тогда я подумал, что даже если я использую его напрямую, например, назначая его...
53 просмотров
schedule 16.03.2022

Как передать функцию и пакет параметров в лямбду, в конструктор std::thread?
Я хочу реализовать «прерываемый» поток на С++ 11 в соответствии с этим ответом . Я параметризовал свой прерываемый класс, чтобы он мог обернуть любой класс потока, который имеет аналогичный конструктор (предназначенный для std::thread, но также...
998 просмотров

Сокращение для std::move
Было бы плохой практикой для некоторого класса S перегружать унарный operator + (или, может быть, operator * для классов, не связанных с указателями) следующим образом? struct S { S && operator + () & noexcept { return...
170 просмотров

Как заставить компилятор предпочесть перегрузку метода const в С++?
У меня есть функция-член С++ класса с перегрузкой const и не- const . Class Example { public: int const & Access() const; int & Access(); [...] }; Я хочу, чтобы константная версия была предпочтительнее, поскольку...
328 просмотров

Идеальная пересылка ссылок с помощью std::bind внутри вариативного шаблона
Я наткнулся на ошибку в своем коде, которую я проследил до того факта, что аргументы для std::bind "... никогда не передаются по ссылке, если только они не заключены в std::ref или std::cref ". Что я имею У меня есть шаблон функции,...
839 просмотров

Пересылка аргументов в конструктор вместе с дополнительными аргументами
Я пытаюсь сделать следующее: template<typename T, typename Handle, typename... Args> bool MyClass::CreateArray(T *&array_, Handle *&handle_, const std::string& handleName_, int64_t size_, int64_t...
65 просмотров
schedule 09.08.2022

Вложение подвыражений в шаблоны выражений
Мы пишем библиотеку шаблонов выражений для обработки операций со значениями с разреженным вектором градиента (автоматическое дифференцирование первого порядка). Я пытаюсь выяснить, как сделать возможным вложение подвыражений по ссылке или значениям в...
119 просмотров

Идеальная переадресация на лямбду, полученную в качестве аргумента
class Frame<P> представляет изображение с пикселями типа P . Алгоритм, который перебирает его пиксели, нетривиален из-за нескольких гибких возможностей в базовом формате буфера данных. Поэтому я хотел бы избежать дублирования кода в...
60 просмотров

std :: forward и ref-квалификаторы для функций-членов
Я был в ситуации, когда я использовал std::forward везде, где у меня была ссылка на переадресацию, и мне было интересно, было ли что-то из этого ненужным или даже неправильным. Например, наличие std::forward в std::begin() вызове. Из-за...
258 просмотров

Почему не `const int ci = 2; std::forward‹int›(ci);` работает и как это исправить/обойти?
Простой вопрос: почему следующее не работает (подразумевая копию ci )? #include <utility> int main(){ const int ci = 2; std::forward<int>(ci); } prog.cpp: в функции 'int main()': prog.cpp:6:23: ошибка: нет...
3321 просмотров
schedule 29.09.2023

Пересылка аргументов
У меня есть конструкция в виде: template<class T> void do_something_with_it(T*&& ptr) { //here I can do something with this ptr } template<class T,class... Args> void do_something_with_them(T*&&...
366 просмотров

Должен ли параметр шаблона T преобразовываться в T&, когда функция принимает аргумент T&& и получает lvalue?
Я пытаюсь понять идеальную переадресацию на C++, поэтому я написал следующий быстрый и грязный фрагмент кода, чтобы проверить это. class CValue { public: CValue(int i) : m_i(i) { printf("Default constructor called!\r\n");...
271 просмотров
schedule 01.04.2023