Использование 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
, какой другой способ избежать построения нового вектора?