次の 2 つの関数を 1 つにマージできるように、コンテナーと 2 つのタプル型にテンプレートを用意したいと考えています。
template<typename Container>
void vblock(int row, int col, const Container& container) {
foreach( const typename Container::value_type& item, container ) {
cell(row, col, item);
++row;
}
}
template<typename container, typename T1, typename T2>
void vblock(int row, int col,
const std::list<typename boost::tuple<T1, T2> >& container) {
typedef boost::tuple<T1, T2> Tuple;
foreach( const Tuple& item, container ) {
cell(row, col, item.template get<0>());
cell(row + 1, col, item.template get<1>());
++col;
}
}
template<typename container, typename T1, typename T2>
void vblock(int row, int col,
const std::set<typename boost::tuple<T1, T2> >& container) {
typedef boost::tuple<T1, T2> Tuple;
foreach( const Tuple& item, container ) {
cell(row, col, item.template get<0>());
cell(row + 1, col, item.template get<1>());
++col;
}
}
C++ Templates - Specifying a container type and that container element type that it has and C++ Template class using STL container and a typedefを既に確認しましたが、私の質問には答えません。
STL コンテナーに適したシンプルな C++ テンプレートという質問は私の質問に最も似ていますが、boost::tuple のテンプレートを追加する方法がわかりませんでした。ありがとう!