C++ 嵌套的结构化绑定是否可行?

C++ 嵌套的结构化绑定是否可行?,c++,c++17,structured-bindings,C++,C++17,Structured Bindings,假设我有一个类型为的对象 std::map<std::string, std::tuple<int, float>> data; 不,这是不可能的 我清楚地记得在某个地方读到过这样一篇文章:嵌套结构化绑定不允许用于C++17,但他们正在考虑在未来的标准中允许它。但是找不到源。不,不可能;但这是: for (auto&& [key, value] : data) { auto&& [my_int, my_float] = value;

假设我有一个类型为的对象

std::map<std::string, std::tuple<int, float>> data;

不,这是不可能的


我清楚地记得在某个地方读到过这样一篇文章:嵌套结构化绑定不允许用于C++17,但他们正在考虑在未来的标准中允许它。但是找不到源。

不,不可能;但这是:

for (auto&& [key, value] : data) {
  auto&& [my_int, my_float] = value;
}

至少很接近。

你试过了吗?是的,我试过了。它不适用于上述语法。这就是为什么我问它是不是可能的。问题是:如何告诉C++每个隐藏对象的使用什么样的const/引用,每个嵌套的导入的名字集都被绑定到哪里?const/reference限定符指的是所述隐藏对象,而不是其成员引入的别名/
get()
。如果这两者是相同的,我也看不出它是如何重要的,也不会立即想到需要不同的限定符的情况,但是如果C++与第二个类相比,我不希望在嵌套结构绑定中添加C++。而且让他们上第一堂课似乎很危险,因为语法可能已经很紧张了!我很好奇,如果嵌套分解成为一件事,语法如何不会与属性冲突。这将离Python++更近一步@米拉多洛我也在问自己同样的问题。在类型限定符之后是否允许使用属性,如
auto[[attribute]][var1,var2]
?@Timo-Yup,请查看。属性几乎可以是任何地方。@miradulo可能是额外的尾随逗号?像auto[[a,b],]=func();是的,我现在就是这样做的。谢谢。(只是出于好奇,我还没有完全理解:)在这里使用通用参考有什么好处?是不是
数据
l值,这样这些通用引用最终会成为l值引用?@kaba我很懒,如果我不在乎的话,可以使用
自动&&&
当我想阻止修改时,
自动&
当我想修改迭代的内容时,和
auto
当我需要副本时,我可以修改,而不会影响原始序列。在这里,我不在乎,所以我使用
auto&
auto&
对我来说意味着“我不在乎它是如何存储的——别名、副本或其他什么”。
for (auto&& [key, value] : data) {
  auto&& [my_int, my_float] = value;
}