Преобразовать тип кортежа - PullRequest
2 голосов
/ 03 февраля 2012

Так что я новичок в повышении MPL, и я не знаю, как использовать его со стандартными типами.

Я хочу метафункцию, которая охватывает этот тип:

std::tuple<T0, T1, ..., TN>

В это:

std::tuple<
  std::function<T0(std::tuple<T0, T1, ...>, std::tuple<T0, T1, ...>)>,
  std::function<T1(std::tuple<T0, T1, ...>, std::tuple<T0, T1, ...>)>,
  ...,
  std::function<TN(...)>
>

и кажется, что это можно сделать с помощью transform , но я хочу иметь тип кортежа, а не вектор типов. (На самом деле он не должен использовать MPL, но я думаю, он будет короче?)

Предыстория: в настоящее время я использую совершенно универсальные типы и полагаюсь на весь адский разрыв, если используется неправильно, но я хочу вычислить TupleOfFunctions для получения правильной ошибки.

template<class TupleOfValues, class TupleOfFunctions>
void f(TupleOfValues v, TupleOfFunctions fun)

1 Ответ

4 голосов
/ 03 февраля 2012

Как насчет следующего?

template<typename T> struct transform;
template<typename ...T>
struct transform<std::tuple<T...>> {
  typedef std::tuple<std::function<T(std::tuple<T...>, std::tuple<T...>)>...> type;
};
...