如何解决如何定义可以进行结构化绑定的对象的概念?
我想定义一个concept
,它可以检测类型T
是否可以是结构化绑定:
template <typename T>
concept two_elements_structured_bindable = requires (T t) {
auto [x,y] = t;
};
但是无法编译。是否有适当的方法来定义像这样的concept
?
解决方法
否。
结构化绑定有以下三种情况:
-
数组。这很容易检测。
-
类似元组的元组。您可以轻松检查
std::tuple_size<E>::value
是否有效,然后检查std::tuple_element<I,E>::type
作为所有正确类型的类型是否有效。但是get
案比较难,因为您必须处理成员与非成员的关系……但是我认为这是可行的。 -
具有所有公共(是的,技术上可访问的)成员作为同一类的直接成员的类型。当前技术无法检测到这一点。我认为
magic_get
可以处理struct X { int a,b; };
,但是struct Y : X { };
和struct Z { X& x; };
都无法处理。
从C ++ 20开始,您将需要某种内在的编译器来执行此操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。