基本的に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
FYI、 'boost :: function <>'は1つのテンプレート引数をとります。 – ildjarn