c++ - 具有多个模板参数的概念
问题描述
我正在尝试使用 C++20 概念来开始熟悉它们。我对简单的概念感觉很舒服,例如使用标准概念movable
我可以写这样的东西(在所有示例中,我想我using namespace std
和我都包括在内<concepts>
,并且需要任何其他标题):
template<movable T>
int foo (T obj);
并确保在调用此函数时obj
可以移动传递的对象。我什至可以用更长的形式写这个:
template<typename T>
requires movable<T>
int foo (T obj);
结果是一样的(我认为)。
但现在让我们看看另一个概念,例如same_as
. same_as
需要 2 个模板参数(要比较的 2 种类型),所以我可以写:
template<typename T>
requires same_as<T, string>
int bar (T obj);
现在 T 是string
。但是我怎样才能把它写成更短的形式呢?我试过了,我可以写这个(正如我直觉所期望的那样):
template<same_as<string> T>
int bar (T obj);
但是这种形式背后的正式规则是什么?
函数模板参数的名称( T
) 是否作为概念模板的第一个参数输入?或者可能是最后一次?我不知道,关于这个主题的信息很少。我的意思是,在这个例子中它是无关紧要的,因为它same_as<A, B>
在语义上等同于same_as<B, A>
,但在某些情况下,顺序很重要。
我知道有类似标题的问题,比如这个,但它问的是不同的问题。
这些是我试图从中获取信息但失败的资源:cppReference、cppModernes、open-std (我浏览了 2018 年、2019 年和 2020 年)和这篇文章。
解决方案
推荐阅读
- if-statement - 如何以最小份额的价值要求特定份额的海龟?
- css - Ionic 3:图像文件未加载到设备中
- php - 包含字符串的变量没有回显任何内容
- mysql - MySQL游标存储过程条件显示重复记录
- c# - 在 windows 窗体水晶报表查看器中选择专家按钮在哪里?
- angular - “字符串”类型的参数不可分配给“自定义类型”类型的参数
- r - 如何根据现有日期创建一系列年-周字符串值?
- javascript - Firebase 实时数据库:orderByChild().equalTo() 第四级嵌套
- entity-framework-core - 配置 RetryOnFailure 时 maxRetryDelay 参数是什么
- oracle - 如何在 asp.net 核心 Web 应用程序中设置 tnsnames.ora?