基本的にboost::functionと同じように、boostプリプロセッサを使用して異なるテンプレート変数の長さのテンプレートクラスを宣言したいと思います。
#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のコードを調べましたが、どのように機能するのか理解できません。何か案は?