c++ - 为什么结构化绑定不支持可变参数?
问题描述
C++17 增加了结构化绑定:
tuple<int, int, int> make_tuple();
int test() {
auto [a, b, c] = make_tuple();
return a | b | c;
}
我的直觉是尝试将它们用作参数包。
template <size_t N>
auto make_tuple(); // returns tuple with N ints
template <size_t N>
int test() {
auto [...values] = make_tuple<N>();
return (0 | ... | values);
}
唉,我不能这样做。为什么委员会排除了这样的功能?现在感觉不一致,lambda 捕获可以包含参数包。
我知道委员会里到处都是聪明有创意的人,像我这样的想法一定是有充分理由被拒绝的。那是什么原因?
解决方案
随着时间的推移添加功能是开发语言的本质。
仅仅因为某些语言还没有出现,并不意味着委员会已经彻底拒绝了它。这并不意味着他们“排除”了它。可能只是被忽视了,或者只是还没有被认真考虑。请记住,std::make_unique
直到 C++14 才可用。
在这种特殊情况下,它是最近提出的一项功能,即P1061。您会从修订历史部分注意到,委员会“对其进行了有利的审查,并认为这是对我们时间的一项很好的投资”。所以我猜你很幸运。:)
推荐阅读
- x11 - XKeysymToKeycode 和键盘布局
- parsing - 使用 awk 检查一行中的多个位置的数据
- r - 根据 ID 将一个数据帧的行合并到另一个数据帧的多列
- r - R:在应用于特定对象时获取函数的形式参数
- linux - 在 shell 脚本中终止程序 (CTRL+C)
- javascript - 如何使用 Javascript 将服务器时间戳转换为正常时间?
- python - 如何精确匹配时间戳中的一个冒号并将其转换为句点?
- javascript - 这个意想不到的输出是怎么来的?
- excel - Excel - 使用 SUMIF/INDEX/MATCH 将数周合并为数月
- azure-devops - 在 ARM 模板中管理复杂的 SQL 查询