C++ 如何在C++;

C++ 如何在C++;,c++,c++11,tuples,C++,C++11,Tuples,正如标题所说,我有一个关于划分元组的问题 事实上,我可以使用std::index_sequence来完成,但代码看起来很难看 有没有一种优雅的方法可以做到这一点 这里有一些代码来说明我的意思 #include<tuple> using namespace std; template<typename THead, typename ...TTails> void foo(tuple<THead, TTails...> tpl) { tuple<

正如标题所说,我有一个关于划分元组的问题

事实上,我可以使用
std::index_sequence
来完成,但代码看起来很难看

有没有一种优雅的方法可以做到这一点

这里有一些代码来说明我的意思

#include<tuple>
using namespace std;

template<typename THead, typename ...TTails>
void foo(tuple<THead, TTails...> tpl)
{
    tuple<THead> tpl_h { get<0>(tpl) };
    tuple<TTails...> tpl_t { /* an elegent way? */ }
    do_sth(tpl_h, tpl_t);
}

int main()
{
    foo(make_tuple(1, 2.0f, 'c'));
    return 0;
}
#包括
使用名称空间std;
模板
void foo(元组tpl)
{
元组tpl_h{get(tpl)};
元组tpl_t{/*一种简单的方法?*/}
做某事(第三方物流,第三方物流);
}
int main()
{
foo(make_tuple(1,2.0f,'c'));
返回0;
}

如果您有支持C++17的编译器,可以使用:

由于您使用的是支持C++14和更高版本的VS2015.2,因此在可用的库支持方面受到了相当大的限制。但是,您可以使用分段构造:

struct unpacker {
    tuple<THead> tpl_h;
    tuple<TTails...> tpl_t;
    unpacker(THead h, TTails... t) : tpl_h{h}, tpl_t{t...} {}
};
auto unpacked = pair<unpacker, int>{piecewise_construct, tpl, tie()}.first;
do_sth(unpacked.tpl_h, unpacked.tpl_t);
struct解包程序{
元组tpl_h;
元组第三方物流;
解包(THead h,TTails…t):tpl_h{h},tpl_t{t..}
};
自动解包=成对{分段_构造,tpl,tie()};
做某事(unpacket.tpl_h,unpacket.tpl_t);

.

以前也有人问过类似的问题:但ecatmur的C+17答案看起来要短得多。@Swift谢谢,我去看看。谢谢。但我使用VS2015.2(支持C++ 14)。有没有一种方法可以在不更换编译器的情况下使用?@WangChu:
apply
可以在C++14中实现。@Jarod42好的,我会试试。@WangChu找到了一个使用
分段构造的C++14解决方案,但它不太优雅。
struct unpacker {
    tuple<THead> tpl_h;
    tuple<TTails...> tpl_t;
    unpacker(THead h, TTails... t) : tpl_h{h}, tpl_t{t...} {}
};
auto unpacked = pair<unpacker, int>{piecewise_construct, tpl, tie()}.first;
do_sth(unpacked.tpl_h, unpacked.tpl_t);