Описание тега perfect-forwarding
Идеальная пересылка описывает свойство шаблонов функций C++11, которое позволяет правильно выводить аргументы как lvalue или rvalue и пересылать их в той же форме другим функциям.
2
ответа
std::move или std::forward при назначении универсального конструктора переменной-члену в C++
Рассмотрим следующие классы foo1 а также foo2 template <typename T> struct foo1 { T t_; foo1(T&& t) : t_{ std::move(t) } { } }; template <typename T> struct foo2 { foo1<T> t_; foo2(T&& t) : t_{ std::forward<T>…
02 дек '16 в 14:53
2
ответа
C++: в списке базовых объектов производная память дает неожиданные результаты при передаче по ссылке
У меня возникают некоторые проблемы с пониманием границ использования ссылок вместо указателей: как я могу передать производный объект без виртуальных функций, только набор данных, в список базовых объектов? В моем приложении есть объект события и о…
25 янв '14 в 23:55
1
ответ
Оптимизация переезда
Рассмотрим две реализации класса: struct S1 { std::vector< T > v; void push(T && x) { v.push_back(std::move(x)); } void push(T const & x) { push(T(x)); } void pop() { v.pop_back(); } void replace(T && x) { pop(); push(std::…
08 янв '16 в 16:49
2
ответа
Каково намерение конструктора forward-by-lvalue-reference, пока существует совершенный конструктор пересылки?
Давайте принимать std::pair<T1, T2> В качестве примера. Он имеет следующие два конструктора: constexpr pair( const T1& x, const T2& y ); // #1 template< class U1, class U2 > constexpr pair( U1&& x, U2&& y ); // #2…
04 янв '18 в 09:16
1
ответ
Ошибка C2783: "_Ty && std:: forward (remove_reference<_Ty>:: type &&) throw ()": не удалось вывести аргумент шаблона для "_Ty"
У меня есть шаблонная реализация параллельной очереди, которая имеет функцию push, которая выглядит следующим образом: template <typename T> class concurrent_queue { public: // other code... void push(const T& item) { std::unique_lock<s…
29 дек '14 в 21:38
2
ответа
Параметры пересылки в диспетчеризации тегов
Я пишу функцию для привязки параметров SQL и хочу использовать диспетчеризацию тегов. Итак, я написал этот код: class OraclePreparedStatement { public: template<typename T> void bind_param(uint32_t col_index, T&& param) { bind_param_im…
30 дек '15 в 08:30
1
ответ
Почему я не могу использовать черты с пересылкой ссылок в C++?
У меня есть следующий тестовый код. Смотрите godbolt https://godbolt.org/z/fLRM8d для исполняемого примера template <typename T> struct Traits { static const bool value = false; }; struct Zip{}; template <> struct Traits<Zip> { sta…
12 дек '18 в 11:28
1
ответ
Проблема с пересылкой копирующего конструктора
Кто-нибудь знает, почему не работает пересылочная копия ctor? Ошибка компилятора, когда один тип является вектором, а другой - стеком??? #include "stdafx.h" #include <iostream> #include <vector> #include <type_traits> using namespa…
30 ноя '12 в 06:17
2
ответа
Как std:: применять параметры forward без явного std::forward?
Рассмотреть возможность реализации std::apply: namespace detail { template <class F, class Tuple, std::size_t... I> constexpr decltype(auto) apply_impl(F &&f, Tuple &&t, std::index_sequence<I...>) { return std::invoke(std…
21 дек '16 в 10:34
1
ответ
Превратите литье / конструкцию в идеальную передовую функцию
SSCCE: #include <functional> using std::function; using std::forward; template<typename ToType, typename... FromTypes> ToType construct(FromTypes&&... fromTypes) { return ToType(forward<FromTypes>(fromTypes)...); } class Ma…
24 июн '14 в 15:41
0
ответов
Всегда ли std::forward() используется в шаблонной функции?
Может кто-нибудь дать мне определение не шаблонной функции, показывающее явный вызов std::forward()? Я предполагаю, что параметр forward () всегда является (?) Универсальной ссылкой. Универсальная ссылка может быть объявлена как "авто" auto&&a…
16 мар '18 в 16:57
1
ответ
Идеальная пересылка с несколькими проходами по входным аргументам
Рассмотрим следующую функцию accept который принимает "универсальную ссылку" типа T и направляет это к parse<T>() Функциональный объект с перегрузкой для lvalues и один для rvalues: template<class T> void accept(T&& arg) { pars…
25 ноя '13 в 14:44
1
ответ
Идеальная пересылка параметров шаблона переменной в функцию-член
Я пытаюсь реализовать шаблон наблюдателя с примером использования следующим образом: class Widget { class WidgetObserver { virtual void SomethingHappened(Widget&) { }; virtual void TextChanged(Widget&, const char*) { }; virtual void BoundsCh…
13 янв '18 в 15:39
1
ответ
Возможна ли регрессия std::forward с g++ 6.1 - ошибка или предполагаемое поведение?
g++ 6.1 была недавно введена в тестовые репозитории Arch Linux, и часть моего кода, успешно скомпилированного с g++ 5.3.0, больше не компилируется. Я сделал минимальный пример: gcc.godbolt.org ссылка // This code compiles with g++ 5.3.0 // This does…
04 май '16 в 09:10
3
ответа
C++ множественный доступ к rvalue-ссылке в том же операторе, что и совершенная пересылка
Следующий код безопасен? Особенно если vec является ссылкой на rvalue, делает ли последняя строка то, что должна (а именно рекурсию, в которой элементы vec правильно подведены)? template<typename VectorType> auto recurse(VectorType&& v…
13 ноя '14 в 03:22
1
ответ
Отличается между движением и вперед в этом примере
Первый пример, который принимает A по значению, делает два хода, а один по refref делает только один ход. В чем разница? struct A { A() { cout << "constructor" << endl;} A(const A&) { cout << "copy constructor " << endl;}…
21 ноя '12 в 15:53
1
ответ
Прекрасно переадресация функции оболочки?
Рассмотрим следующий функтор, чтобы помочь определить, какая версия его operator() называется. struct functor { void operator()() {std::cout << "functor::operator" << std::endl;} void operator()() const {std::cout << "functor::oper…
22 фев '18 в 09:12
1
ответ
Идеальная функция обратного вызова
Цель: получить функцию обратного вызова, которая будет принимать параметры любого типа в качестве параметров функции обратного вызова. .h template <typename F, typename A> void DelayedCallback(F&& CallbackFunction, A&& Args = N…
04 июн '15 в 16:37
5
ответов
Непонимание двойной пересылки lvalue - когда передается по значению
#include <iostream> #include <vector> #include <type_traits> #include <utility> using namespace std; template <typename Func, typename... Args> void proxy(Func f, Args&&... args) { f(std::forward<Args>(arg…
22 июн '18 в 15:14
3
ответа
Переадресация методов C++
Мне нужно реализовать класс Container, который действует точно так же, как содержащийся класс шаблона: template <typename T> class Container { public: //... private: // T data_; }; T может быть предопределенным типом (например, int) или пользо…
12 июн '15 в 12:25