使用复制粘贴处理重复代码
学过c++模板元编程的会知道模板特化。模板特化可以理解成模板元函数的重载(这个地方不了解也不太重要)。说白了就是要定义一组相似的模板。
template<> struct sample<0> { };
template<> struct sample<1> { };
template<> struct sample<2> { };
// ...
template<> struct sample<10> { };
如果没有宏元编程提供的一些工具,那就只能人工的复制粘贴。我们可以利用宏元编程提供的一组设施来简化上面的操作。
使用本地迭代宏处理重复代码
使用本地迭代宏需要按照如下方式使用:
#define SAMPLE(n) \
template<> struct sample<n> { }; \
/**/
#define TL_LOCAL_MACRO SAMPLE
#define TL_LOCAL_LIMITS (0, 10)
#include TL_LOCAL_ITERATE()
TL_LOCAL_ITERATE内部是一组宏。按照名称理解它功能是本地重复掉调用TL_LOCAL_MACRO宏,迭代区间是通过TL_LOCAL_LIMITS定义的tuple确定。
本例就是TL_LOCAL_ITERATE把宏TL_LOCAL_MACRO重复调用11次,从0到10,并用迭代值替换n。是不是很简洁呀。
下面详细介绍TL_LOCAL_ITERATE内部实现。其实实现