no message

git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@56 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
magmaikh 2002-10-06 06:25:22 +00:00
parent ef33406cb3
commit 41a466c1b2
3 changed files with 119 additions and 18 deletions

View file

@ -10,6 +10,8 @@
#include "TypeList.h"
//Reference version
/************************************************************************************
// class template GenData
// Iteratates a TypeList, and invokes the functor GenFunc<T>
@ -29,9 +31,9 @@ struct ExtractDataType
}
};
Loki::GenData<parameter_tl, ExtractDataType> gen;
std::vector<user_defined_type> stuff;
gen(std::back_inserter(stuff));
Loki::IterateTypes<parameter_tl, ExtractDataType> gendata;
std::vector<some_type> stuff;
gendata(std::back_inserter(stuff));
*******************************************************************************/
namespace Loki
{
@ -45,22 +47,29 @@ namespace Loki
return typeid(T).name();
}
};
template<typename T>
struct sizeof_type
{
size_t operator()()
{
return sizeof(T);
}
};
template <class TList, template <class> class GenFunc>
struct IterateTypes;
template <class T1, class T2, template <class> class GenFunc>
struct IterateTypes<Typelist<T1, T2>, GenFunc>
: public IterateTypes<T1, GenFunc>
, public IterateTypes<T2, GenFunc>
{
typedef IterateTypes<T1, GenFunc> head_t;
head_t head;
typedef IterateTypes<T2, GenFunc> tail_t;
tail_t tail;
template<class II>
void operator()(II& ii)
{
typedef IterateTypes<T1, GenFunc> head_t;
typedef IterateTypes<T2, GenFunc> tail_t;
head_t::operator()(ii);
tail_t::operator()(ii);
head.operator()(ii);
tail.operator()(ii);
}
};
@ -70,8 +79,8 @@ namespace Loki
template<class II>
void operator()(II& ii)
{
typedef GenFunc<AtomicType> genfunc_t;
*ii = genfunc_t()();
GenFunc<AtomicType> genfunc;
*ii = genfunc();
++ii;
}
};
@ -83,6 +92,13 @@ namespace Loki
void operator()(II& ii)
{}
};
template<typename Types, template <typename> class UnitFunc, typename II>
void iterate_types(II &ii)
{
Loki::TL::IterateTypes<Types, UnitFunc> it;
it(ii);
}
}//ns TL
}//ns Loki