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*;
73 reference operator*()
const {
return Base::operator*().get(); }
75 pointer operator->()
const {
return &(Base::operator*().get()); }
79 public std::vector<std::reference_wrapper<T>>::const_iterator
81 using Base = std::vector<std::reference_wrapper<T>>::const_iterator;
85 using reference =
const value_type&;
86 using pointer =
const value_type*;
90 reference operator*()
const {
return Base::operator*().get(); }
92 pointer operator->()
const {
return &(Base::operator*().get()); }
99 mVec.reserve(
cc.size());
100 for (uint
i = 0;
i <
cc.size(); ++
i) {
101 mVec.push_back(std::any_cast<T&>(
cc[
i]));
105 T& at(uint i) {
return mVec[i].get(); }
107 const T& at(uint i)
const {
return mVec[i].get(); }
109 T& front() {
return mVec.begin()->get(); }
111 const T& front()
const {
return mVec.begin()->get(); }
113 T& back() {
return std::prev(mVec.end())->get(); }
115 const T& back()
const {
return std::prev(mVec.end())->get(); }
117 uint size()
const {
return mVec.size(); }
119 T& operator[](uint i) {
return mVec[i].get(); }
121 const T& operator[](uint i)
const {
return mVec[i].get(); }
123 Iterator begin() {
return Iterator(mVec.begin()); }
125 Iterator end() {
return Iterator(mVec.end()); }
127 ConstIterator begin()
const {
return ConstIterator(mVec.begin()); }
129 ConstIterator end()
const {
return ConstIterator(mVec.end()); }