gpt4 book ai didi

c++ - 按特定顺序扩展可变模板值的最有效方法是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:11 24 4
gpt4 key购买 nike

我目前可以这样做:

template <std::size_t... Is, class... Ts>
decltype( auto ) custom_expand( std::index_sequence<Is...>, Ts&&... args )
{
auto tmp_tuple{ std::make_tuple( std::forward<Ts>( args )... ) };
return std::make_tuple( std::move( std::get<Is>( tmp_tuple ) )... );
}

调用函数...

custom_expand( std::index_sequence<1, 2, 0>{}, int{ 0 }, char{ 1 }, double{ 2 } );

...返回 std::tuple<char, double, int>正如预期的那样。但是,这需要构建一个临时的 std::tuple<>以及所有这些操作。

有没有办法避免临时 std::tuple<>这样我就不必为任何拷贝/移动付费?

最佳答案

为避免过多的复制/移动,请使用 forward_as_tuple 作为临时对象。这会返回一个引用元组,任何体面的优化器都可以轻松地将其优化掉。

template <std::size_t... Is, class... Ts>
auto custom_expand( std::index_sequence<Is...>, Ts&&... args )
{
auto tmp_tuple = std::forward_as_tuple( std::forward<Ts>( args )... );
return std::make_tuple( std::get<Is>( std::move(tmp_tuple) )... );
}

关于c++ - 按特定顺序扩展可变模板值的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37848360/

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