テンプレートクラスがありtemplate<typename T, typename R>
ます。Rはタイプvector<T*>
またはlist<T*>
です。
クラスに演算子をオーバーロードさせたい[]
ので、ベクトルの場合は組み込みの[]
演算子を使用して効率を高め、リストの場合はイテレータを使用して実装します。
私にはテンプレートの特殊化の仕事のように聞こえるので、次のように書くことを考えました。
template<typename T, typename R>
T& tContainer_t<T, R>::operator[]( unsigned i )
{
//TODO with iterators
}
template<>
T& tContainer_t::operator[]<T, std::vector<T*> >( unsigned i )
{
// TODO with built in [] operator
}
これは間違っており、コンパイラはこれを許可していません。
それを機能させる方法はありますか、それともtypeid()
実行時に2つのオブジェクトを区別し、それに応じて動作するために使用する必要がありますか?