C++20 中概念的语法

2024-03-14

在这个问题中我们如何转换需求link https://stackoverflow.com/questions/67133581/check-if-type-has-certain-value-types-and-the-keyword-value-type-itself-using-c?noredirect=1#comment118665451_67133581到一个概念

我已尝试以下操作:

template< typename U, typename Tin, typename Tout>
concept MyConditions =
    (
         U::value_type
        &&  Tin::value_type
        &&  Tout::value_type
        && std::is_floating_point_v<typename Tin::value_type>
        && std::is_integral_v<typename U::value_type>
        && std::is_floating_point_v<typename Tout::value_type>
    );

这个概念现在应用于我的成员函数之一:

class test_concept
{
template< typename U, typename Tin, typename Tout>
requires MyConditions <U, Tin, Tout>
static void test_routine(const U&, const Tin&, Tout& );
}

测试时:

std::vector<double> test{ };
std::vector<int> testi{ };
std::vector<double> test2{ };

test_concept::test_routine(testi, test, test2);

Using clang我收到错误消息,指出未找到匹配项,并附有一条注释:

注意:因为替换的约束表达式格式错误:缺少 之前的“类型名称” 依赖类型名称 'vector::value_type' U::值类型


您不需要手动检查类型是否存在。如果它们不存在,SFINAE 将使您的概念默默返回false反正。所以:

template< typename U, typename Tin, typename Tout>
concept MyConditions =
    std::is_integral_v<typename T::value_type> &&
    std::is_floating_point_v<typename U::value_type> &&
    std::is_floating_point_v<typename Tout::value_type>;

但如果您想显式检查类型,语法如下:

template< typename U, typename Tin, typename Tout>
concept MyConditions =
    requires
    {
        typename U::value_type;
        typename Tin::value_type;
        typename Tout::value_type;
    } &&
    std::is_integral_v<typename T::value_type> &&
    std::is_floating_point_v<typename U::value_type> &&
    std::is_floating_point_v<typename Tout::value_type>;

您还可以将所有条件移至requires:

template< typename U, typename Tin, typename Tout>
concept MyConditions =
    requires
    {
        typename U::value_type;
        typename Tin::value_type;
        typename Tout::value_type;
        requires std::is_integral_v<typename T::value_type>;
        requires std::is_floating_point_v<typename U::value_type>;
        requires std::is_floating_point_v<typename Tout::value_type>;
    };

此外,您应该更喜欢标准概念而不是旧特征:

template< typename U, typename Tin, typename Tout>
concept MyConditions =
    requires
    {
        typename U::value_type;
        typename Tin::value_type;
        typename Tout::value_type;
        requires std::integral<typename T::value_type>;
        requires std::floating_point<typename U::value_type>;
        requires std::floating_point<typename Tout::value_type>;
    };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++20 中概念的语法 的相关文章

随机推荐

  • Entity Framework Core:Update() 方法在依赖实体上插入而不是更新

    看起来 EF Core 正在执行 INSERT 而不是 UPDATE 因此 MySQL 会抱怨重复键 但是 我在 DbSet 上使用 Update 方法 并且实体确实设置了主键 这会导致 MySql 中出现 DUPLICATE ENTRY
  • Angular 2 ngStyle 和背景图像[重复]

    这个问题在这里已经有答案了 我对 Angular 2 ngStyle 指令遇到了很大的麻烦 我无法从 Base64 编码文件设置背景图像 现在在 template html 中我有这个 div class projects item wra
  • Angular 2 动画/过渡仅适用于 chrome?

    正如标题所示 我一直在使用 Angular2 构建一个 Web 应用程序 并决定测试跨浏览器 结果发现漂亮的动画只能在 Chrome 中运行 这是我的一个组件的样子 如果这可能会有所不同 Component selector contact
  • 如何在 Plone 中定义默认视图

    我已经有一个用于 Plone 站点 主页 的默认视图的页面模板 如何定义文件夹的默认视图 此默认视图应使用页面模板 尝试这个 导航到所需的文件夹 在网址末尾添加 manage propertiesForm in the resulting
  • Python scikit-learn KMeans 在计算轮廓分数时被杀死 (9)

    我目前正在研究一个图像数据集 250 000 张图像 因此与特征向量一样多 每个图像都由 132 个特征组成 并尝试使用 sklearn 提供的 KMeans 函数 我在 Mac OS X 10 10 Python 2 7 和 sklear
  • 在 MATLAB 中绘图时循环颜色

    当我使用以下方法在同一个图上绘制多条曲线时hold on 每条曲线默认为相同的颜色 蓝色 我希望它们有不同的颜色 我见过的一种解决方案是制作颜色矢量 例如c k g r 并循环它 但我不喜欢这个解决方案 如果我的绘图数量大于颜色向量的长度
  • PHP 设置 MySQL 套接字位置

    我以前遇到过这样的问题 我的 C 应用程序在 tmp mysql sock 中寻找套接字 但我的套接字位置已设置为 var run mysqld sock 我现在更改了 my cnf 中的设置 始终将套接字放入 tmp 现在 当我尝试使用
  • 使用 GDI+ 创建的图像未显示在 VB6 LeadTools 中

    我们有使用 VB6 构建的遗留应用程序 这些应用程序正在使用引导工具 一切都很顺利 我们有另一个 NET 进程来优化图像 并做一些水印 并将其保存为 tiff 格式 这是 NET 代码的一瞥 using var bitmap new Bit
  • 使用 Android TabLayout 时单击选项卡不会切换当前选项卡

    我应该自己设置 onClicks 吗 如果是的话 我应该在哪里设置
  • OpenGL在另一个线程中绘图

    我为 Windows 创建了一个简单的 OpenGL 应用程序 它创建一个窗口 然后使用 OpenGL 命令在其上绘制一个三角形 这按预期工作 后来我想将我的绘图代码封装到一个DLL中 以便可以在C WinForms应用程序中使用它来绘制W
  • 包含聚合的更新语句在 SQL Server 中不起作用

    我希望有人可以在这里帮助我的语法 我有两张桌子ansicache encounters and ansicache x refclaim Table The encounters表有一个encounter匹配的列patacctnumber栏
  • 寻找序列中的零岛

    想象一下你有一个很长的序列 找到序列全为零的间隔 或更准确地说 序列下降到接近零值的间隔 的最有效方法是什么abs X
  • 将 Java Applet 迁移到什么/哪里?

    我目前正在审查一个中等规模的代码库 大约 30K LOC 它使用一个巨大的 Applet 并与其他系统交互 它是一个创建自定义标签的工具 因此我们需要拖放和其他相关的 UI 组件 鉴于代码库是 Java 语言 您将迁移到哪种技术 小程序 否
  • 使用 Selenium 登录页面可以工作 - 使用 BS4 进行解析可以工作 - 但不能同时使用两者

    从 Wordpress 论坛获取一些数据需要登录和解析 两个部分 两者作为独立部分都可以很好地工作 我可以使用 selenium 登录 完美 并且我可以使用 BS4 解析 抓取 数据 但是当我将这两个部分结合起来时 我遇到了会话问题 我无法
  • 了解 Scala 类型系统中的 Aux 模式

    这个问题之前可能被问过并回答过 但我想通过一个例子来理解这一点 但我无法推理出 Aux 模式可能有帮助的地方 所以这是特点 trait Foo A type B def value B 为什么我的类型与值函数的返回类型绑定 这样做我能取得什
  • IEnumerable.ToList() 的影响

    我只是想知道打电话时发生了什么 ToList on an IEnumerable在 C 中 这些项目实际上是否被复制到堆上全新的重复项目 或者新列表只是引用堆上的原始项目 我很想知道 因为有人告诉我调用 ToList 的成本很高 而如果只是
  • c openmp并行用于并行区域内

    我的问题是这样的one https stackoverflow com questions 11493265 for loop inside parallel region 但我想做一些不同的事情 例如 在我的并行区域内 我想在 4 个线程
  • Java:非静态嵌套类和instance.super()

    我很难理解 Java 中的非静态嵌套类 考虑以下示例 它先打印 Inner 然后打印 Child class Outer class Inner Inner System out println Inner public class Chi
  • 在 SQL Server 2005 中使用 TABLOCK 和 HOLDLOCK 提示是否会完全阻止插入直到事务结束?

    我需要检索 SQL Server 2005 生成的标识字段 通常我只使用 SCOPE IDENTITY 或向插入添加 OUTPUT CLAUSE 但是这些方法在这种情况下都没有帮助 因为表附加了 INSTEAD OF 触发器 接下来我考虑了
  • C++20 中概念的语法

    在这个问题中我们如何转换需求link https stackoverflow com questions 67133581 check if type has certain value types and the keyword valu