Вопросы по теме 'perfect-forwarding'
Каковы основные цели использования std :: forward и какие проблемы он решает?
В идеальной пересылке std::forward используется для преобразования именованных ссылок rvalue t1 и t2 в безымянные ссылки rvalue. Какова цель этого? Как это повлияет на вызываемую функцию inner , если мы оставим t1 & t2 как lvalues?...
83583 просмотров
schedule
26.12.2022
Почему std::forward отбрасывает constexpr-ness?
Будучи не объявленным constexpr , std::forward отбрасывает constexpr-ness для любой функции, в которую он пересылает аргументы. Почему std::forward не объявлено constexpr само по себе, чтобы сохранить constexpr-ness?
Пример: (проверено с...
1286 просмотров
schedule
23.07.2022
Аргумент шаблона rvalue неявно используется как lvalue, и работает std::forwarding
Этот пример использования std::forward меня озадачивает. Это моя отредактированная версия:
#include <iostream>
#include <memory>
#include <utility>
using namespace std;
struct A{
A(int&& n) { cout <<...
412 просмотров
schedule
12.01.2023
Обоснование неявного копирования и перемещения конструктора С++?
Мое понимание конструктора неявного копирования С++ похоже на
T(T const& x) :
base1(x), base2(x) ... ,
var1(x.var1), var2(x.var2)...
{}
Конструктор перемещения, задание копирования и перемещения также следуют аналогичному...
632 просмотров
schedule
08.09.2022
Зачем нужны правила сворачивания ссылок
Все могут знать, что мы используем rvalue-ссылки в сочетании с правилами свертывания ссылок для создания идеальных функций пересылки, например так
template<typename T>
void f(T&& arg) {
otherfunc(std::forward<T>(arg));
}...
896 просмотров
schedule
20.05.2022
Почему я не могу вернуть unique_ptr из пары?
Почему я не могу вернуть unique_ptr из пары?
#include <iostream>
#include <memory>
#include <utility>
using namespace std;
unique_ptr<int> get_value() {
pair<unique_ptr<int>, int>...
2815 просмотров
schedule
15.03.2023
Переадресация в конструктор на месте
У меня есть класс сообщений, с которым раньше было немного сложно работать, вам нужно было создать класс сообщений, указать ему выделить пространство для вашего объекта, а затем заполнить пространство либо путем построения, либо по элементам.
Я...
1011 просмотров
schedule
23.05.2023
Это универсальная ссылка? Имеет ли здесь смысл std::forward?
Рассмотрим этот фрагмент кода, в котором используется общепринятая идиома: шаблон функции создает экземпляр шаблона класса, специализированного на выведенном типе, как видно из std::make_unique и std::make_tuple , например:
template...
1079 просмотров
schedule
01.09.2022
Какое правильное ограничение enable_if для идеального установщика переадресации?
Назад к основам! Презентация Essentials of Modern C++ на CppCon обсудила различные варианты передачи параметров и сравнила их производительность с простотой написания/обучения. «Расширенный» вариант (обеспечивающий наилучшую производительность во...
1544 просмотров
schedule
21.11.2022
Правильное использование for_each_arg — слишком много переадресации?
Я очень рад, что обнаружил for_each_arg(...) , который значительно упрощает работу с пакетами аргументов.
template<class F, class...Ts>
F for_each_arg(F f, Ts&&...a) {
return...
364 просмотров
schedule
11.12.2023
В 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 просмотров
schedule
04.04.2023
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 просмотров
schedule
04.05.2022
Универсальный ссылочный аргумент используется дважды
Я хочу создать оболочку вокруг 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 просмотров
schedule
19.09.2022
Конструктор C++: идеальная переадресация и перегрузка
У меня есть два класса, A и B, и B является производным от A. A имеет несколько конструкторов (2 в приведенном ниже примере). B имеет один дополнительный элемент для инициализации (который имеет инициализатор по умолчанию).
Как добиться того,...
11487 просмотров
schedule
20.05.2023
Идеальная переадресация с временной оболочкой функции
Рассмотрим следующий код в C++14 , следуя сообщениям здесь , здесь и здесь :
// Include
#include <tuple>
#include <iostream>
#include <type_traits>
// Temporary function queue declaration
template <class... F>
class...
694 просмотров
schedule
29.11.2022
Почему для пересылки ссылок необходим std :: forward
В таком шаблоне функции
template <typename T>
void foo(T&& x) {
bar(std::forward<T>(x));
}
Разве x не является ссылкой на rvalue внутри foo , если foo вызывается со ссылкой на rvalue? Если foo вызывается со ссылкой...
1282 просмотров
schedule
22.07.2022