●STL スレッド●
■ このスレッドは過去ログ倉庫に格納されています
0793785
NGNGclass base {
struct _vec_type{};
struct _lst_type{};
struct _x { std::list<_y*> ylist; typedef X_CONTAINER container_type; };
struct _y { std::list<_x*> xlist; typedef Y_CONTAINER container_type; };
// 要素x,yについて型とコンテナタイプを設定
template<typename T, typename CONTAINER> struct _container_gen {};
template<typename T> struct _container_gen<T,_vec_type> { typedef std::vector<T> type; };
template<typename T> struct _container_gen<T,_lst_type> { typedef std::list<T> type; };
typedef typename _container_gen<_x, X_CONTAINER>::type _xset;
typedef typename _container_gen<_y, Y_CONTAINER>::type _yset;
// 要素の集まり
_xset xset;
_yset yset;
// n番目の要素を返す関数
template<typename T>
T element_forward__dispatch(T begin, int n, _vec_type) {
return begin+n; // vector<>の場合はランダムアクセスで
}
template<typename T>
T element_forward__dispatch(T begin, int n, _lst_type) {
while (n) { ++begin; --n; } // list<>の場合はインクリメントで
return begin;
}
template<typename T>
T element_forward(T begin, int n) {
typename T::container_type container;
return element_forward__dispatch(begin,n,container);
}
};
//使い方
base<_vec_type, _lst_type> a(100,100);
_x x = a.element_forward(xset,10); // 速い
_y y = a.element_forward(yset,10); // 遅い
■ このスレッドは過去ログ倉庫に格納されています