本身不是为meta-programming而出现的,但是,tuple能包含任意个数据类型,并生成instance,成为融合编译时meta-programming和运行时programming的绝佳工具。
tuple为元编程提供的工具有:
element <N, Tuple>::type
length < Tuple >::value
2. loki::Typelist
一种类型容器,为元编程提供的方法有:
Length
<TypeList >TypeAt
<TypeList, N >IndexOf
<TypeList, T >Append
<TypeList, T >Erase
<TypeList, T >Replace
<TypeList, T, U >为编译期到运行期提供映射的工具有:
GenScatterHierarchy
GenLinearHierarchy
3. boost::mpl::vector, list, etc.
专为元编程提供的一套工具,在元编程领域实现了类似于STL container的语义。为元编程提供的方法有:
begin<>, end<>, transform<>, insert<>...
为编译期到运行期提供的映射的工具有:
for_each<>
总而言之,MPL库在编译期的元编程能力极其强大,但运行期的能力略显不足。
4. boost::fusion
boost::tuple 和 boost::mpl的结合体,为编译期和运行期的元编程提供支持。并大量使用view来提高编译性能。
5. lmp::tuple
自己使用的light-weight meta-programming toolkit. 与boost::tuple的最主要区别是:当N是一个无效值(比如-1)时,lmp::element
lmp::tuple的好处是允许高阶的元编程,比如缺省处理类型。
No comments:
Post a Comment