Построение одного конкретного типа boost :: tuple с использованием другого - PullRequest
4 голосов
/ 19 января 2012

Дано:

typedef boost :: tuple Tuple_Tn

, где типы T1, ...Все Tn определены,

И учитывая тип T_another, я бы хотел определить новый тип кортежа:

typedef boost :: tuple Tuple_T_plus_1

Но вот моя проблема: там, где я хочу определить это, у меня есть доступ только к типам Tuple_Tn и T_another.

Другими словами, возможно ли определить Tuple_T_plus_1 только в терминах Tuple_Tn и T_another?

1 Ответ

3 голосов
/ 19 января 2012

Я не уверен, что в Boost.Tuple есть такая функция, возможно, Boost.Fusion будет более подходящим для ваших нужд.

Однако если у вас есть компилятор, поддерживающийC ++ 11 вариационных шаблонов, вы можете переключиться на std::tuple и написать небольшую метафункцию для добавления типа к существующему кортежу:

template <typename Container, typename T>
struct push_back;

template <template <typename...> class Container, typename T, typename... Args>
struct push_back<Container<Args...>, T>
{
    typedef Container<Args..., T> type;
};

typedef std::tuple<int, double> myTuple;
typedef push_back<myTuple, bool>::type myOtherTuple;

myOtherTuple(1, 0.0, true);

То же самое можно сделать для boost::tuple, ногораздо труднее написать.

...