我想使用boost預處理器來聲明具有不同模板變量長度的模板類,基本上就像boost :: function所做的那樣。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的代碼,但我無法弄清楚它是如何工作的。有任何想法嗎?
變量模板不會爲你做? –
我在VS2010的工作,它不支持可變參數模板 – Jason
僅供參考,'的boost ::功能<>'需要一個(也是唯一一個)模板參數。 – ildjarn