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