gpt4 book ai didi

c++ - 使用上一次调用的结果递归调用每个元组成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:35 24 4
gpt4 key购买 nike

假设我有一个元组 std::tuple<Operation<1>, Operation<2>, Operation<3>> . Operation<>具有签名为 SomeType someFunction(SomeType) 的成员函数.我想要做的是连续调用这些操作,使得调用的结果顺序为 Operation<3>::someFunction(Operation<2>::someFunction(Operation<1>::someFunction()))我会得到最后的 SomeType值(value)。如何使用可变参数模板(我可以访问 C++17)实现这一点?

我可以用 std::apply([](auto& ...x) { (..., x.someFunction()); }, tuple); 调用每个成员函数但是我需要什么样的表情来调用someFunction()与上一次调用的输出?

最佳答案

我想你可以将 std::apply() 和模板折叠与 lambda 结合起来,如下所示

   auto l = [&val](auto ... Ops) 
{ ((val = Ops.someFunc(val)), ...); };

下面是一个完整的工作示例

#include <tuple>
#include <iostream>

template <int I>
struct Oper
{
static constexpr int someFunc (int i)
{ return i + I; }
};

int main ()
{
std::tuple<Oper<1>, Oper<2>, Oper<3>, Oper<4>> t;

int val {}; // starting value

auto l = [&val](auto ... Ops)
{ ((val = Ops.someFunc(val)), ...); };

std::apply(l, t);

std::cout << val << std::endl;
}

关于c++ - 使用上一次调用的结果递归调用每个元组成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55255858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com