转换元组类型

时间:2012-02-03 04:31:32

标签: c++ boost c++11 metaprogramming

所以我是新手来提升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 个答案:

答案 0 :(得分:4)

以下情况如何?

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;
};