Re: Perfect forward object
От: rg45 СССР  
Дата: 02.11.22 08:52
Оценка: 6 (1)
Здравствуйте, Videoman, Вы писали:

V>Что-то сегодня плохо голова соображает. А возможен ли сабж ?

V>Чего хочется: маленький некопируемый неперемещаемый объект, в который передается ссылка на любой другой (возможно некопируемый и неперемещаемый) тип. При вызове метода объекта ссылка передается дальше. Что-то типа такого:
V>
V>template <typename type_t>
V>struct object
V>{
V>    object(const type_t& type) ...
V>    object(const object& that) = delete;

V>    object& oparator(const object& that) = delete;

V>    const type_t& forward() const ... // as std::forward<>
V>};
V>

V>Тут всё преобразуется к ссылке на const type, а в идеале хотелось бы std::forward<> но для класса. Возможно ли такое в принципе? Если нет, какие возможны компромиссы?

Не уверен, что правильно понял задачу. Что-то типа такого?

template <typename T>
struct wrapper
{
  T t;

  explicit wrapper(T&& t) : t(std::forward<T>(t)) {}

  T&& forward() && { return std::forward<T>(t); }
};

template <typename T>
wrapper<T> wrap(T&& t) { return wrapper<T>(std::forward<T>(t)); }
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 02.11.2022 10:09 rg45 . Предыдущая версия . Еще …
Отредактировано 02.11.2022 10:05 rg45 . Предыдущая версия .
Отредактировано 02.11.2022 9:40 rg45 . Предыдущая версия .
Отредактировано 02.11.2022 9:11 rg45 . Предыдущая версия .
Отредактировано 02.11.2022 8:56 rg45 . Предыдущая версия .
Отредактировано 02.11.2022 8:53 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.