上回中,我们利用LOCAL重复将3个模板类生成到了单独的三行,可是我们还是不会满足,毕竟,一行一个类还是不便于阅读和调试。要进一步改进,我们需要运用新的方法:文件重复(File重复)。
顾名思义,文件重复需要用到文件,我们将用于重复的模式单独写到一个文件中,然后调用这个模式重复产生代码。
开始动手,首先创建一个单独的文件:pattern.hpp
:
#define n BOOST_PP_ITERATION()
#define TINY_print(~,~,data) data
template <BOOST_PP_ENUM_PARAMS(n, class T)>
struct tiny_size<
BOOST_PP_ENUM_PARAMS(n,T)
BOOST_PP_COMMA_IF(n)
BOOST_PP_ENUM(BOOST_PP_SUB(M,n), TINY_print, none)
> : mpl::int_<n> {};
#undef n
这个文件将不会用于编译,而作为一个模式的承载。我们应该注意到,没有了每行后面的’/'符号,因为,它并不是用来产生一行的代码,而是用了产生一个代码块。宏函数ITERATION()
则用来获得当前重复的索引。
为了触发这个模式,我们在我们的主代码中这样写:(test.cpp
)
#include <boost/preprocessor/repetition.hpp>
#include <boost/prep