DanielDemidko
@DanielDemidko
Программист

Как передать оператор разыменования в функцию?

Есть контейнер с указателями, его нужно преобразовать в контейнер объектов, т. е. просто разыменовать каждый указатель. Сейчас я делаю это с помощью transform и лямбды.
vector<GameObject> ToVector(
    const set<GameObject*, DereferenceCompare<GameObject, greater>> &cont)
{
    vector<GameObject> res(size(cont));
    transform(cbegin(cont), cend(cont), begin(res), [](GameObject *const p) {
        return *p; 
    });
    return res;
}

Есть ли способ сократить код еще больше, может быть какая нибудь стандартная функция есть, которая проводит разыменование указателя?
  • Вопрос задан
  • 158 просмотров
Пригласить эксперта
Ответы на вопрос 1
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Короче будет только с библиотекой range (из буста, или range-v3).
К слову, вам надо проверять указатель на null, хотя бы ассертом, если уверены, что там всегда валидные указатели.
Кроме того, вы по сути копируете объекты. Это дорого. Если этого не планировалось, то советую использовать интеллектуальные указатели или reference_wrapper. К тому же, в современном C++ практически нет необходимости использовать сырые указатели.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы