gpt4 book ai didi

c++ - 调用函数时生成隐式元组

转载 作者:行者123 更新时间:2023-11-28 05:56:27 25 4
gpt4 key购买 nike

我想调用一个模板函数并将两个参数集作为元组传递。但是在将其作为参数传递之前,调用此函数始终需要使用 std::make_tuple 手动构建元组。

例子:

template < typename ... OUT, typename ... IN>
void Command( std::tuple<OUT...>, std::tuple<IN...>)
{
}


int main()
{
// Send Parameter
uint8_t mode;
uint16_t addr;

// Receive Parameter
uint16_t neighbour0;
uint16_t neighbour1;

Command( std::make_tuple( mode, addr ),
std::make_tuple( neighbour0, neighbour1 ));
}

是否有机会/技巧删除函数调用中的 std::make_tuple 以便我可以编写如下内容:

Command( {mode, addr}, {neighbour0, neighbour1} );

最佳答案

如果记法

Command(mode, addr)(neighbour0, neighbour1);

是可以接受的,Command()本质上可以首先返回一个带有绑定(bind)的函数对象 std::tuple<...>这将在接收到其他参数时调用实际函数。那就是实现将遵循

template <typename... Out, typename... In>
void realCommand(std::tuple<Out...>, std::tuple<In...>);

template <typename... Out>
auto Command(Out&&... out) {
return [&](auto&&... in){
realCommand(std::make_tuple(std::forward<Out>(out)...),
std::make_tuple(std::forward<decltype(in)>(in)...));
}
}

关于c++ - 调用函数时生成隐式元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34090971/

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