Вопросы по теме '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 просмотров
schedule
04.02.2024
Почему идеальная функция переадресации должна быть шаблонной?
Почему следующий код действителен:
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 просмотров
schedule
26.09.2023
Каков наилучший способ переименования (псевдоним/вперед) функции в С++?
(Я ограничу этот вопрос С++ 11, так как считаю, что в С++ 98 нет общего способа сделать это).
Предположим, у меня есть сложный (с точки зрения подписи) набор функций template и/или перегруженных функций, и я хочу использовать эти функции точно...
3061 просмотров
schedule
01.02.2024
есть ли разница между 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 просмотров
schedule
20.02.2023
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 просмотров
schedule
06.06.2023
Выведение аргумента шаблона из строкового литерала
В настоящее время я думаю о том, как лучше всего ограничить общий тип шаблона std::sting , а также строковыми литералами. Поэтому я сравниваю выведенный тип с желаемым типом, используя std::is_same . В случае std::string это работает сразу. Для...
1061 просмотров
schedule
20.08.2022
невозможно связать неконстантную ссылку 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 просмотров
schedule
12.03.2023
Идеальная передача параметров функции в указатель на функцию: как насчет передачи по значению?
У меня есть структура данных, которая обеспечивает доступ к своим элементам, и некоторая логика цикла для того, как их перебирать. Мне нужно вызывать разные функции внутри цикла(ов). Все эти функции принимают элемент данных в качестве первого...
70 просмотров
schedule
02.12.2022
Perfect Forward с использованием std::forward против RefRefCast
Буду признателен за помощь в понимании реализации std::forward.
В чем разница между std::forward и стандартным приведением к T&& в функции шаблона? По крайней мере, в этом примере они оба правильно выполняют пересылку. LValue перенаправляется в...
51 просмотров
schedule
16.04.2022
подтолкнуть объект к вектору после прохождения через функцию преобразования
Я хочу вставить функцию преобразования (вероятно, std::function) для изменения объекта, который помещается в std::vector. Я хотел бы, чтобы объект создавался на месте и проходил через функцию без создания дополнительных копий.
Допустим, я делаю...
51 просмотров
schedule
11.05.2024