Kai*_*zke 6 c++ stdtuple std-pair
我有一个函数f(),它返回std::pair<A, B>具有某些类型A和B. 我还有另一个函数g(),它调用f()两次并返回一个std::tuple<A, B, A, B>. 有没有办法tuple直接从两个调用构造返回f()?所以我想将当前代码的最后三行作为快捷方式:
std::tuple<A, B, A, B>
g(type1 arg1, type2 arg2, ...) {
// perform some preprocessing
auto pair1 = f(...);
auto pair2 = f(...);
return { pair1.first, pair1.second, pair2.first, pair2.second }
}
Run Code Online (Sandbox Code Playgroud)
成一个班轮(而不是三个)。如果该解决方案也适用于任意长度的元组,那就太好了,尤其是在模板情况下。
例如,在当前的 Python3 中,解决方案是return (*f(...), *f(...)). C++ 中是否有与 Python 中类似的列表/元组解包运算符?
是的,有std::tuple_cat。即使 cppreference 说...
如果 [arguments] 中的任何类型不是 的特化,则行为未定义
std::tuple。但是,实现可以选择支持遵循类似元组协议的类型(例如std::array和std::pair)。
我已经对其进行了测试,并且所有主要的标准库实现(libstdc++、libc++ 和 MSVC 的库)都支持它。
例子:
#include <tuple>
struct A {};
struct B {};
std::pair<A, B> foo() {return {};}
std::tuple<A, B, A, B> bar()
{
return std::tuple_cat(foo(), foo());
}
Run Code Online (Sandbox Code Playgroud)