59 std::vector<std::reference_wrapper<T>> mVec;
62 class Iterator :
public std::vector<std::reference_wrapper<T>>::iterator
64 using Base = std::vector<std::reference_wrapper<T>>::iterator;
68 using reference = value_type&;
69 using pointer = value_type*;
75 reference operator*()
const {
return Base::operator*().get(); }
77 pointer operator->()
const {
return &(Base::operator*().get()); }
81 public std::vector<std::reference_wrapper<T>>::const_iterator
83 using Base = std::vector<std::reference_wrapper<T>>::const_iterator;
87 using reference =
const value_type&;
88 using pointer =
const value_type*;
94 reference operator*()
const {
return Base::operator*().get(); }
96 pointer operator->()
const {
return &(Base::operator*().get()); }
103 mVec.reserve(
cc.size());
104 for (uint
i = 0;
i <
cc.size(); ++
i) {
105 mVec.push_back(std::any_cast<T&>(
cc[
i]));
109 T& at(uint i) {
return mVec[i].get(); }
111 const T& at(uint i)
const {
return mVec[i].get(); }
113 T& front() {
return mVec.begin()->get(); }
115 const T& front()
const {
return mVec.begin()->get(); }
117 T& back() {
return std::prev(mVec.end())->get(); }
119 const T& back()
const {
return std::prev(mVec.end())->get(); }
121 uint size()
const {
return mVec.size(); }
123 T& operator[](uint i) {
return mVec[i].get(); }
125 const T& operator[](uint i)
const {
return mVec[i].get(); }
127 Iterator begin() {
return Iterator(mVec.begin()); }
129 Iterator end() {
return Iterator(mVec.end()); }
131 ConstIterator begin()
const {
return ConstIterator(mVec.begin()); }
133 ConstIterator end()
const {
return ConstIterator(mVec.end()); }