Предположим, что у меня есть следующее определение класса:Как создать boost :: tuple с указанным количеством элементов (одного типа)?
template <unsigned int N>
class foo
{
boost::tuples::tuple<...> bar;
};
Учитывая время компиляции постоянной N
, я хотел бы расширить тип bar
быть кортеж, который содержит N
элементы определенного типа. То есть тип foo<2>::bar
будет boost::tuples::tuple<T, T>
. Я предполагаю, что для этого могу использовать Boost.MPL, но я еще не понял точной последовательности. Я думаю, что я мог бы сделать:
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;
};
Итак, например type_repeater<T, 2>::type
будет эквивалентно boost::mpl::vector<T, T>
. Я просто не уверен, как/если я могу взять этот список типов и ввести его в список аргументов кортежа, как я хочу. Это возможно?
Вам не нужно повышать для этого, если у вас есть доступ к C++ 11. Вы согласны с версией, использующей C++ 11? – OmnipotentEntity
Я открыт для рассмотрения наилучшего решения для любого случая, но в конце мне понадобится хотя бы реализация C++ 03. –