Сообщение Re: Perfect forward object от 02.11.2022 8:52
Изменено 02.11.2022 10:09 rg45
Re: Perfect forward object
Здравствуйте, Videoman, Вы писали:
V>Что-то сегодня плохо голова соображает. А возможен ли сабж ?
V>Чего хочется: маленький некопируемый неперемещаемый объект, в который передается ссылка на любой другой (возможно некопируемый и неперемещаемый) тип. При вызове метода объекта ссылка передается дальше. Что-то типа такого:
V>
V>Тут всё преобразуется к ссылке на const type, а в идеале хотелось бы std::forward<> но для класса. Возможно ли такое в принципе? Если нет, какие возможны компромиссы?
Не уверен, что правильно понял задачу (Как понимать "std::forward<> но для класса"? std::forward работает для любых типов, в т.ч. и для классов).
Что-то типа такого?
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<> но для класса. Возможно ли такое в принципе? Если нет, какие возможны компромиссы?
Не уверен, что правильно понял задачу (Как понимать "std::forward<> но для класса"? 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)); }
Re: Perfect forward object
Здравствуйте, Videoman, Вы писали:
V>Что-то сегодня плохо голова соображает. А возможен ли сабж ?
V>Чего хочется: маленький некопируемый неперемещаемый объект, в который передается ссылка на любой другой (возможно некопируемый и неперемещаемый) тип. При вызове метода объекта ссылка передается дальше. Что-то типа такого:
V>
V>Тут всё преобразуется к ссылке на const type, а в идеале хотелось бы std::forward<> но для класса. Возможно ли такое в принципе? Если нет, какие возможны компромиссы?
Не уверен, что правильно понял задачу. Что-то типа такого?
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)); }