C++ 如何定义可以结构化绑定的对象的概念?
我想定义一个C++ 如何定义可以结构化绑定的对象的概念?,c++,c++20,c++-concepts,C++,C++20,C++ Concepts,我想定义一个概念,它可以检测类型T是否可以是结构化绑定: 模板 概念二元素结构化绑定=requires(T){ 自动[x,y]=t; }; 但这是无法编译的。有没有合适的方法来定义这样的概念 结构化绑定有三种情况: 数组。这很容易被发现 像元组一样。您可以轻松地检查std::tuple\u size::value是否有效,然后检查std::tuple\u element::type是否作为所有正确类型的类型有效。但是get的情况更难,因为您必须处理成员与非成员之间的关系。。。但除此之外我认为
概念
,它可以检测类型T
是否可以是结构化绑定:
模板
概念二元素结构化绑定=requires(T){
自动[x,y]=t;
};
但这是无法编译的。有没有合适的方法来定义这样的概念
结构化绑定有三种情况:
std::tuple\u size::value
是否有效,然后检查std::tuple\u element::type
是否作为所有正确类型的类型有效。但是get
的情况更难,因为您必须处理成员与非成员之间的关系。。。但除此之外我认为是可行的
struct X{inta,b;}代码>但都不是结构Y:X{}
norstructz{X&X;}代码>您需要有适当的反射来检查此案例
从C++20开始,您需要某种内部编译器来完成此操作。等待C++23反射。
template <typename T>
concept two_elements_structured_bindable = requires (T t) {
auto [x, y] = t;
};