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:
parent
ef33406cb3
commit
41a466c1b2
3 changed files with 119 additions and 18 deletions
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue