在 C++14 中手动实现结构化绑定
Manually implement structured binding in C++14
是否可以使用 C++14 实现 C++17 结构化绑定? 我使用以下语法进行简单的概念证明:
int a,b;
(a,b)=std::tuple<int,int>(4,2);
我想象的方式是:
template <typename T, typename U>
operator=(operator()(T a, U b), std::tuple<T,U>(x,y))
因此,=
接收一个左边的"捆绑元组",并将右元组分配给它。
这甚至可能吗? - 它是否可以使用 C++14 实现,或者是否需要在后台进行词法/解析才能启用它?
编辑这是否可以不使用std::tie
,而是使用 (a,b( 语法?
当然。这甚至已经存在于标准库中,std::tie()
:
std::tie(a, b) = std::make_tuple(4, 2);
请注意,这仅适用于右侧的元组。您可以相当直接地将其扩展为适用于原始数组。但是让它为聚合工作要困难得多 - 如果没有额外的语言支持,你需要magic_get。
如果你真的想要:
(a, b) = std::make_tuple(4, 2);
要工作,那么唯一的方法基本上是通过添加一个为你std::tie()
的全局operator,()
来垃圾你拥有的所有其余代码:
template <typename T, typename U>
auto operator,(T& t, U& u) { return std::tie(t, u); }
template <typename... T, typename U>
auto operator,(std::tuple<T&...> t, U& u) { return std::tuple_cat(t, std::tie(u)); }
因此:
(a, b) = std::make_tuple(4, 2);
本身转换为:
std::tie(a, b) = std::make_tuple(4, 2);
但就像...别这样。
相关文章:
- 在基于范围的for循环中使用结构化绑定声明
- 使用结构化绑定'Reflection'
- 为什么结构化绑定不使用"auto&"返回对结构成员的引用,而是返回成员本身
- 为什么 boost::comb 对结构化绑定的支持缺少结构化绑定机制对 boost::tuples::cons 的适应?
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 在 C++14 中手动实现结构化绑定
- 为什么结构化绑定不支持可变数组?
- 为<vtkDataArray> VTK 非结构化网格声明 vtkSmartPointer 类型的变量时出现问题
- 在只读(即 const)访问器上执行结构化绑定的最佳实践是什么?
- 是否有像ADTF2这样的结构化属性?
- 为 n 维系统实现模块化龙格-库塔四阶方法
- 带有 std::minmax 和 rvalues 的结构化绑定
- 在无序映射的结构化绑定中推导类型
- c++在实现模板化嵌套类时遇到问题
- 为什么基于范围的 for 循环中的结构化绑定只是一个副本而不是引用?
- 您自己的类型的结构化绑定,不是结构或元组(通过公共成员函数)
- 共享或私有 openmp 代码中的结构化类型变量
- 结构化绑定:遍历元组的双端面
- 与现有VAR无法实现结构化结合
- 结构化绑定实现地下层和std::元组