我想使用 boost 预处理器来声明具有不同模板变量长度的模板类,基本上就像 boost::function 所做的那样。
#if !BOOST_PP_IS_ITERATING
#ifndef D_EXAMPLE_H
#define D_EXAMPLE_H
#include <boost/function>
#include <boost/preprocessor/iteration/iterate.hpp>
#define BOOST_PP_ITERATION_PARAMS_1 (3, (1, 2, "example.h"))
#include BOOST_PP_ITERATE()
#else
template<class T, BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class T)>
class Example
{
boost::function<T, (BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T))> func;
};
#endif
上面的代码显然不会工作,因为它在同一个头文件中声明了具有不同模板变量长度的同一个类。我想要实现的是包含一个文件并定义具有不同模板变量长度的类,就像 boost::function 一样。
#include "example.h"
Example<int, int, float> example1;
Example<double, int> example2;
我查找了 boost::function 的代码,但我不知道它是如何工作的。有任何想法吗?