Описание тега universal-reference
Универсальная ссылка относится к ссылочному типу, который может быть либо ссылкой lvalue, либо ссылкой rvalue в зависимости от ее инициализатора. Они позволяют пользователю использовать совершенную пересылку.
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
3
ответа
Поведение шаблонной функции C++
Допустим, у меня есть эта функция: bool f(int&& one, int&& two) { } Если я попытаюсь позвонить с этим кодом: int x = 4; f(x, 5); компилятор будет жаловаться, что не может преобразовать x из ссылки lvalue в ссылку rvalue, что является…
03 окт '13 в 07:24
2
ответа
Универсальная ссылка в конструкторе вызывает ошибку, не может назначить вызываемый функтор std::function
В следующем полном тестовом примере, если я использую первый ctor, беря функтор по значению и перемещая его на место, код компилируется и работает, как и ожидалось. Однако, если я использую универсальный эталонный ctor, он не скомпилируется (я включ…
18 дек '13 в 23:04
1
ответ
Универсальная ссылка для ошибки типа шаблона
Извините за плохое название... Итак, обычно в такой функции: template <class T> void f(T&& i){ } T&& это универсальная ссылка. В таком контексте это rvalue-ссылка: template <class T> struct s{ void f(T&& t){} }; Э…
02 ноя '16 в 18:54
2
ответа
C++ Невозможно переместить unique_ptr с универсальными ссылками
Рассмотрим этот код: template<typename T> T mov(T&& t){ return std::move(t); } int main(){ std::unique_ptr<int> a = std::unique_ptr<int>(new int()); std::unique_ptr<int> b = mov(a); } mov Функция должна просто взять у…
22 июл '14 в 10:17
2
ответа
Перемещение элементов из std::vector<T1> в std::vector<std:: pair <T1, T2 >>
Каков наиболее правильный и эффективный способ std:: переместить элементы из вектора определенного типа (T1) в вектор из std:: pair того же типа (T1) и другого типа (T2)? Другими словами, как мне написать MoveItems()? #include <iostream> // Fo…
26 окт '16 в 03:25
0
ответов
const применяется к параметру "универсальная ссылка"
Я наткнулся на статью Скотта Майерса об универсальных ссылках, ссылку. Из того, что я понял универсальная ссылка, это какой-то тип T&& может означать тип rvalue или lvalue в разных контекстах. Например: template<typename T> void f(T&am…
01 янв '16 в 14:06
2
ответа
Специализация шаблона функции, который принимает универсальный ссылочный параметр
Как специализировать шаблон функции, который принимает универсальный ссылочный параметр? foo.hpp: template<typename T> void foo(T && t) // universal reference parameter foo.cpp template<> void foo<Class>(Class && cl…
30 ноя '12 в 22:27
0
ответов
Являются ли параметры шаблона функции T& и T&& неоднозначными?
Рассмотрим эти две перегрузки: template <typename T> void foo(T &) {} template <typename T> void foo(T &&) {} Они потенциально неоднозначны? Следующий код компилируется с Clang 3.4, но не работает с GCC 4.8, который сообщает …
19 янв '14 в 17:55
1
ответ
C++ универсальная ссылка в конструкторе и оптимизации возвращаемого значения (rvo)
Почему оптимизация rvalue не происходит в классах с конструктором с универсальными ссылочными аргументами? http://coliru.stacked-crooked.com/a/672f10c129fe29a0 #include <iostream> template<class ...ArgsIn> struct C { template<class ..…
24 июл '14 в 04:27
1
ответ
Почему значения const l связываются иначе, чем значения const r, заданные T&& и const T& overloads?
Для этого кода (доступно на http://ideone.com/Mo7fQr) template<typename T> void f(const T&) { std::cout << "const T& overload\n"; } template<typename T> void f(T&&) { std::cout << "T&& overload\n"; } i…
20 июл '13 в 05:43
2
ответа
Разрешение перегрузки с универсальными ссылками
У меня есть функция, которая может принимать любой тип по универсальной ссылке, и я хотел бы перегрузить его для определенных типов (некоторые из них сами по себе шаблонизированы, хотя я не думаю, что это важно здесь). К сожалению, я не могу понять,…
22 май '13 в 14:51
0
ответов
Почему подписи make_shared и allocate_shared различаются для аргументов, которые нужно переслать?
Для того, чтобы создать std::shared_ptr для данного типа T Есть два пути среди других: std::allocate_shared а также std::make_shared, Основное отличие (или, по крайней мере, то, что меня интересует в этом вопросе) состоит в том, что первый делает вс…
17 фев '16 в 12:44
4
ответа
Когда не использовать `auto&&`?
auto&& mytup = std::make_tuple(9,1,"hello"); std::get<0>(mytup) = 42; cout << std::get<0>(mytup) << endl; Есть ли необходимость в копировании / перемещении (без RVO) при возврате из make_tuple? Это вызывает неопредел…
13 фев '13 в 08:14
1
ответ
C++ Разрешение перегрузки с универсальным эталонным шаблоном функции, которое нельзя изменить
Предположим, где-то в моем коде есть функция foo с универсальным ссылочным параметром, который я не могу изменить: template<typename T> auto foo(T&& t) { std::cout<<"general version"<<std::endl; } Теперь хочу перегрузить fo…
20 авг '15 в 14:51
0
ответов
Использование значения Rvalue в примере реализации is_copy_asignable
Я смотрю выступление Уолтера Брауна на CppCon 2014 "Современное шаблонное метапрограммирование: сборник". Во второй части он демонстрирует использование decltype и declval с примером реализации is_copy_assignable. Вот ссылка на видео со слайдом, на …
19 фев '17 в 11:03
1
ответ
Выбор конструктора шаблона Variadic завершается неудачно, когда аргумент является ссылкой
У меня есть следующий код: #include <iostream> #include <typeinfo> template <typename T> struct A : T { template <typename ...Args> A(Args&&... params) : T(std::forward<Args>(params)...), x(0) { std::cout <&l…
23 сен '14 в 17:30
6
ответов
Получите преимущества универсальной ссылки, без универсальной ссылки
проблема Давайте предположим, что функция func который принимает любой контейнер в форме Container<Type, N, Args...> (это контейнер, который принимает в качестве первого аргумента шаблона тип, а в качестве второго std::size_t определяет, сколь…
26 июл '14 в 16:32
2
ответа
C++ явный универсальный ссылочный конструктор не скрывает конструктор копирования?
Наверное, мое понимание explicit недостаточно, но я удивляюсь, почему в следующем коде конструктор копирования не скрывается неверсальным ссылочным конструктором, когда я объявляю последний как explicit, struct A { A() = default; template<typenam…
08 май '15 в 07:09
1
ответ
Универсальная ссылка в указателе на функцию-член
У меня возникли проблемы с пониманием, почему следующий код не может скомпилировать #include <iostream> #include <typeinfo> #define PRINT_FUNC() {std::cout << __PRETTY_FUNCTION__ << std::endl;} struct Obj { Obj(){PRINT_FUNC()…
08 авг '15 в 06:55