首页 > 解决方案 > 具有多个模板参数的概念

问题描述

我正在尝试使用 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>,但在某些情况下,顺序很重要。


我知道有类似标题的问题,比如这个,但它问的是不同的问题。

这些是我试图从中获取信息但失败的资源:cppReferencecppModernesopen-std (我浏览了 2018 年、2019 年和 2020 年)这篇文章

标签: c++templatesc++20c++-concepts

解决方案



推荐阅读