如何定义可以进行结构化绑定的对象的概念?

问题描述

我想定义一个concept,它可以检测类型T是否可以是结构化绑定

template <typename T>
concept two_elements_structured_bindable = requires (T t) {
  auto [x,y] = t;
};

但是无法编译。是否有适当的方法来定义像这样的concept

解决方法

否。

结构化绑定有以下三种情况:

  1. 数组。这很容易检测。

  2. 类似元组的元组。您可以轻松检查std::tuple_size<E>::value是否有效,然后检查std::tuple_element<I,E>::type作为所有正确类型的类型是否有效。但是get案比较难,因为您必须处理成员与非成员的关系……但是我认为这是可行的。

  3. 具有所有公共(是的,技术上可访问的)成员作为同一类的直接成员的类型。当前技术无法检测到这一点。我认为magic_get可以处理struct X { int a,b; };,但是struct Y : X { };struct Z { X& x; };都无法处理。

从C ++ 20开始,您将需要某种内在的编译器来执行此操作。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...