テンプレート パラメーター リストまたはベクトル (および明らかにデータ型) として取得できる小さなテンプレート クラスを作成しています。[ ] 演算子をオーバーロードする必要があります。これを行うには、ベクトルのオーバーロードされた [ ] を使用して、リストの簡単な検索 (次、次、目的のインデックスに到達するまで) を行います。したがって、パラメーターがリストのパラメーターであり、次のような結果に従って実装されているかどうかを typeid で確認しています。
const T* operator[](size_t _index)const
{
if(typeid(ContainerT<T,std::allocator<T> >) == typeid(vector<T>))
{
return m_container[_index];
}
else
{
const_iterator it = m_container.begin();
for(int i=0;i<_index;++i)
{
++it;
}
return *it;
}
}
リストに [ ] を使用しない場合、すべて問題ありませんが、使用すると次のようになります。
tContainer_t<int, list> list1;
cout<<list1[0]<<endl;
まったくコンパイルされておらず、コンパイルエラーは次のとおりです。
In file included from main.cpp:6:0:
tContainer.h: In member function ‘const T* tContainer_t<T, ContainerT>::operator[](size_t) const [with T = int, ContainerT = std::list, size_t = unsigned int]’:
main.cpp:68:9: instantiated from here
tContainer.h:80:29: error: no match for ‘operator[]’ in ‘((const tContainer_t<int, std::list>*)this)->tContainer_t<int, std::list>::m_container[_index]’
typeidが機能することを確認したのでわかりません(まあ...)、とにかく、コンパイラは添え字がリストに対しても呼び出されることを認識しているようです。