问题描述
我想定义一个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开始,您将需要某种内在的编译器来执行此操作。