私はC++ 03内で可変テンプレートを使用する回避策を見つけようとしています。C++ 03:boosterを使用したVariadicテンプレート
私が達成したいのは、テンプレート化されたクラス内では、boost::tuple
属性がインスタンス化されています。この属性は、各単一クラスのテンプレートパラメータのベクトルで構成されます。
template<typename ...Parameters>
class Foo
{
typedef std::tuple<std::vector<Parameters>...> Vectors_t;
Vectors_t _vectorsTuple;
}
私は同じ使用してブースト::タプルを達成し、MPL ::ブーストまたは何らかの他の可能な方法したいと思います:
は、これはC++ 11の可変引数テンプレートを使用してのようになります方法です。
おかげ
UPDATE
これは私が思い付いた最終的な解決策です。 一部は@stefanmoosbrugger命題に基づいています。
template<class TypesList>
class FooImpl
{
typedef TypesList TypesList_t;
typedef typename boost::mpl::transform <
TypesList_t,
std::vector<boost::mpl::_1>
>::type VectorTypesList_t;
typedef typename boost::mpl::reverse_fold<
VectorTypesList_t,
boost::tuples::null_type,
boost::tuples::cons<boost::mpl::_2, boost::mpl::_1>
>::type VectorsTuple_t;
protected:
VectorsTuple_t _vectorsTuple;
};
template<class Type1,
class Type2 = boost::mpl::na,
class Type3 = boost::mpl::na,
class Type4 = boost::mpl::na> /* Made it up to four possible types as an example */
class Foo : public FooImpl<boost::mpl::vector<Type1, Type2, Type3, Type4> >{};
おかげで、それは実際のタプルにMPLから変換::ベクトルはあまり醜い可能性があまりにも悪い:) 任意のチャンスではないのか? 本当にBOOST_PP_ENUMマクロとカスタムpush_frontが必要ですか? – codeJack
をフォールドするのではなく、mpl :: transformを使ってスムーズに実現できたら、 'mpl_vec_t'に' mpl :: transform'を使って要素を 'Tx'から' std :: vectorに変換することができます'boost :: fusion :: result_of :: as_vector :: type').. :)からブースト融合ベクトルを作成するだけで、間違いなく醜く見えるはずです。 –
このソリューションでコードを更新してください。 :) – codeJack