Angenommen, dass ich die folgende Klassendefinition haben:Wie erstellt man ein boost :: Tupel mit der angegebenen Anzahl von Elementen (des gleichen Typs)?
template <unsigned int N>
class foo
{
boost::tuples::tuple<...> bar;
};
N
die Kompilierung-Konstante gegeben, ich möchte die Art von bar
erweitern ein Tupel zu sein, die N
Elemente eines bestimmten Typs enthält. Das heißt, der Typ foo<2>::bar
wäre boost::tuples::tuple<T, T>
. Ich schätze, dass ich Boost.MPL dafür verwenden kann, aber ich habe noch nicht die genaue Reihenfolge herausgefunden. Ich glaube, ich könnte tun:
template <typename T, int N>
struct type_repeater
{
typedef typename boost::mpl::fold<
boost::mpl::range_c<T, 0, N>,
boost::mpl::vector<>,
boost::mpl::push_back<_1, T>
>::type type;
};
So dann zum Beispiel type_repeater<T, 2>::type
-boost::mpl::vector<T, T>
entspräche. Ich bin mir nur nicht sicher, wie/wenn ich diese Typenliste nehmen und in die Argumentliste eines Tupels einspeisen kann, wie ich will. Ist das möglich?
Sie brauchen keinen Boost dafür, wenn Sie Zugriff auf C++ 11 haben. Wären Sie mit einer Version in Ordnung, die stattdessen C++ 11 verwendet? – OmnipotentEntity
Ich bin offen für die beste Lösung für jeden Fall, aber am Ende werde ich mindestens eine C++ 03-Implementierung benötigen. –