Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中手动实现结构化绑定+;14_C++_C++14 - Fatal编程技术网

C++ 在C+中手动实现结构化绑定+;14

C++ 在C+中手动实现结构化绑定+;14,c++,c++14,C++,C++14,是否可以使用C++14实现C++17结构化绑定? 我的目标是使用以下语法进行简单的概念证明: inta,b; (a,b)=std::tuple(4,2); 我想象的是: 模板 运算符=(运算符()(ta,ub),std::tuple(x,y)) 因此,=从左侧接收一个“绑定元组”,并将右侧分配给它 这可能吗它是可以用C++14实现的,还是需要在后台进行词法分析/解析才能启用它 编辑是否可以不使用std::tie而使用(a,b)语法进行编辑?当然可以。这甚至在标准库中已经存在,如: 请注意,这

是否可以使用C++14实现C++17结构化绑定? 我的目标是使用以下语法进行简单的概念证明:

inta,b;
(a,b)=std::tuple(4,2);
我想象的是:

模板
运算符=(运算符()(ta,ub),std::tuple(x,y))
因此,
=
从左侧接收一个“绑定元组”,并将右侧分配给它

这可能吗它是可以用C++14实现的,还是需要在后台进行词法分析/解析才能启用它


编辑是否可以不使用
std::tie而使用(a,b)语法进行编辑?

当然可以。这甚至在标准库中已经存在,如:

请注意,这仅适用于右侧的元组。您可以相当直接地将其扩展到适用于原始阵列。但是要让它为聚合工作要困难得多——如果没有额外的语言支持,你就需要这样做


如果你真的想要:

(a, b) = std::make_tuple(4, 2);
要工作,那么唯一的方法就是通过添加一个全局
操作符()
来基本上销毁所有剩余的代码,该操作符为您执行
std::tie()

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)); }
其本身转化为:

std::tie(a, b) = std::make_tuple(4, 2);

但是就像。。。不要那样做

对不起,我是说不用领带。sytax
(a,b)=std::tuple
可能吗?@MihaiGalos不可能,除非
a
b
是用户定义的类型,并且有一个重载的
操作符,
。“但就像……不要那样做”-Giga+1。我甚至不敢想象它能破坏多少代码……
(a,b)=无论什么都不是结构化绑定,因为它没有定义
a
b
,你需要它们已经存在。这就是为什么它是语言特性而不是库特性。
(a, b) = std::make_tuple(4, 2);
std::tie(a, b) = std::make_tuple(4, 2);