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
    的情况更难,因为您必须处理成员与非成员之间的关系。。。但除此之外我认为是可行的

  • 将所有公共(是的,技术上可访问)成员作为同一类的直接成员的类型。这是目前技术无法检测到的<我认为,code>magic\u get可以处理
    struct X{inta,b;}但都不是
    结构Y:X{}
    nor
    structz{X&X;}您需要有适当的反射来检查此案例


  • 从C++20开始,您需要某种内部编译器来完成此操作。

    等待C++23反射。
    template <typename T>
    concept two_elements_structured_bindable = requires (T t) {
      auto [x, y] = t;
    };