4

基本的に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のコードを調べましたが、どのように機能するのか理解できません。何か案は?

4

1 に答える 1