LINUX.ORG.RU

Ref-qualified member functions

 


0

2

Наткнулся однажды в книжке на данную фичу, решил погуглить и нашёл больше вопросов, чем ответов.

Собственно вопрос относительно кода в конце статьи, совсем не понял конструкцию

 operator std::unique_ptr<T>() const &; 

Ну и, собственно, о чём идёт речь в целом:

template <typename T>
class some_type
{ 
public:
  operator std::unique_ptr<T>() const &
  {
    return std::unique_ptr<T>(new T(*held_)); // Копируем
  } 
  operator std::unique_ptr<T>() &&
  { 
    return std::move(held_); // Отдаем владение
  } 
private:
  std::unique_ptr<T> held_;
};

some_type f();

void g()
{
  std::unique_ptr<widget> p = f();
}

★★

А что непонятно-то? Два варианта метода, один используется там, где требуется lvalue, другой там где rvalue

annulen ★★★★★
()
Ответ на: комментарий от l4gfcm

Объявлен оператор приведения к типу. Оператор применяется к lvalue обьекту, при применении оператора состояние объекта не изменяется

zaz ★★★★
()
Ответ на: комментарий от annulen

там, где требуется lvalue, другой там где rvalue

Всё же: там, где *this выступает в роли lvalue, другой там, где как rvalue.

xaizek ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.