Как передать стандартный ::уникальный _ptr?

У меня первая попытка использовать C++11 unique_ptr; Я заменяю полиморфный необработанный указатель внутри моего проекта, который принадлежит одному классу, но довольно часто передается.

Раньше у меня были такие функции, как:

bool func(BaseClass* ptr, int other_arg) {
  bool val;
  // plain ordinary function that does something...
  return val;
}

Но вскоре я понял, что не смогу перейти на:

bool func(std::unique_ptr<BaseClass> ptr, int other_arg);

Потому что вызывающая сторона должна будет обрабатывать указатель на функцию, чего я не хочу. Итак, какое лучшее решение моей проблемы?

Я думал о передаче указателя в качестве ссылки, например:

bool func(const std::unique_ptr<BaseClass>& ptr, int other_arg);

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

71
задан lvella 10 March 2017 в 18:29
поделиться