转换元组类型

pas*_*cal 2 c++ boost metaprogramming c++11

所以我是提升 MPL 的新手,我不知道如何将它与标准类型一起使用。

我想要一个隐藏这种类型的元函数:

std::tuple<T0, T1, ..., TN>
Run Code Online (Sandbox Code Playgroud)

进入这个:

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(...)>
>
Run Code Online (Sandbox Code Playgroud)

似乎这可以通过transform来完成,但我想要一个元组类型,而不是类型的向量。(它实际上不必使用 MPL,但我想它会更短?)

背景:目前我使用完全通用的类型,如果使用错误,则依赖所有地狱,但我想计算TupleOfFunctions以获得正确的错误。

template<class TupleOfValues, class TupleOfFunctions>
void f(TupleOfValues v, TupleOfFunctions fun)
Run Code Online (Sandbox Code Playgroud)

kev*_*man 5

以下情况如何?

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;
};
Run Code Online (Sandbox Code Playgroud)

  • 它不会编译,但使用正确的 `std::function` 语法的表单有效:`std::tuple&lt;std::function&lt;T(std::tuple&lt;T...&gt;, std::tuple&lt; T...&gt;)&gt;...&gt;`。 (3认同)