Re[22]: Концепция умного C++
От: rg45 СССР  
Дата: 01.05.25 07:46
Оценка: +1
Здравствуйте, serg_joker, Вы писали:

_>и ещё прикольнее, если тип конструируемой сущности и аргументов конструктора — параметр шаблона типа

_>
_>template<typename T, typename... ARG>
_>auto construct(const T&, ARG&&... arg)
_>{
_>  T ret( std::forward<ARG>(arg)...); // (1)
_>  T ret{ std::forward<ARG>(arg)...}; // (2)
_>  // do some processing, registration of `ret` etc
_>  return ret;
_>}
_>


_>Какой вариант правильнее, (1) или (2)? Вроде как (2) кошернее, если там хочешь сужающих преобразований типов избежать, к примеру, ну и вообще, "Uniform" жеж. Но если T — вектор, к примеру, тады ой.

_>Когда vector виден в коде явно — ещё можно на опыте среагировать на то, что {} может делать не то, что от него ожидал автор. А вот в шаблоне — уже нужно напрячься.

Ну да, это общая проблема использования инит-листов в конструкторах. Я с ней, бывало, сталкивался даже при проектировании собственных классов. С одной стороны, сделали универсальную инициализацию с фигурными скобочками, с другой подсунули эти инит-листы. Мне инит-листы с самого начала не нравились.
--
Справедливость выше закона. А человечность выше справедливости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.