【问题标题】:Transform tuple type转换元组类型
【发布时间】:2012-02-25 18:42:19
【问题描述】:

所以我是提升 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)

【问题讨论】:

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


    【解决方案1】:

    下面的呢?

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

    【讨论】:

    • 它无法编译,但使用正确std::function 语法的表单有效:std::tuple&lt;std::function&lt;T(std::tuple&lt;T...&gt;, std::tuple&lt;T...&gt;)&gt;...&gt;
    • 哇,我没想到... 这么强大,还以为必须手动展开呢,不错。 (你能修正一下语法吗,我还不能)
    猜你喜欢
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多