Использование Propate_const для вектора интеллектуальных указателей

Как можно использовать propagate_const построить std::vector<std::shared_ptr<const X>> из std::vector<std::shared_ptr<X>>?

Прочитав " Превращение вектора shared_ptr в вектор shared_ptr в const", я попытался реализовать это в своем собственном коде, но минимальный рабочий пример не приведен. Пример, приведенный в документации cpp, мне не помог. Можно ли вообще использоватьpropagate_const сюда?

Вот мой минимальный неработающий пример:

#include <memory>
#include <vector>
#include <experimental/propagate_const>

struct B {int x;};

struct A {
    std::vector<std::experimental::propagate_const<std::shared_ptr<B>>> v_;

    std::vector<std::shared_ptr<const B>> & v() const {
        return v_;
    }
};

int main(int argc, char* argv[]) {
    A a = A();
    std::vector<std::shared_ptr<const B>> const v = a.v();
}

Не удается скомпилировать следующее сообщение об ошибке:

error: invalid initialization of reference of type
‘std::vector<std::shared_ptr<const B> >&’
from expression of type
‘const std::vector<std::experimental::fundamentals_v2::propagate_const<std::shared_ptr<B> > >’
11 |         return v_;

Если это невозможно решить с помощью propagate_cast, какой другой способ избежать построения нового вектора?

0 ответов

Другие вопросы по тегам