Re[4]: Как написать Any с uniform initialization
От: rg45 СССР  
Дата: 29.11.19 10:14
Оценка: +2
Здравствуйте, Kernan, Вы писали:

M>>конструктор Any{int} и Any{Any &&} работает совершенно по-разному в моём коде. разве что шаблонный класс-хелпер-инициализатор со специализациями сделать вместо конструктора — и передавать из универсального шаблонного конструктора в него — но это сложно и поэтому убого выглядит

K>Ну так перегрузи его
K>
K>  template<class T>
K>    Any(std::initializer_list<T>&&) { std::cout<<"foo"<<std::endl;  }
K>

K>и в мейн
K>
K>  Any a{10};
K>

K>делай везде префект порвардинг и не будет лишних копирований.

Настало время вредных советов? Бездумное применение perfect forwarding — это современный изощренный способ стрельбы по собственным конечностям, а тем более, если ВЕЗДЕ.

И кстати, в твоем примере это никакой не perfect forwarding, а просто rvalue ссылка на объект initializer_list. Который, даже сам являясь времменным объектом, предоставляет доступ к своим элементам исключительно по константным lvalue ссылкам. Поэтому перемешение содержимого initializer_list невозможно в принципе. Пруф здесь.
--
Отредактировано 29.11.2019 11:10 rg45 . Предыдущая версия . Еще …
Отредактировано 29.11.2019 11:10 rg45 . Предыдущая версия .
Отредактировано 29.11.2019 10:23 rg45 . Предыдущая версия .
Отредактировано 29.11.2019 10:20 rg45 . Предыдущая версия .
Отредактировано 29.11.2019 10:20 rg45 . Предыдущая версия .
Отредактировано 29.11.2019 10:19 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.