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