概念Lite将如何与可变模板交互? 我看了Bjarne Strustrup的演讲,他给出了下面的例子,说明即将到来的C++概念。 void sort(Container& c); // terse notation // Expands to template <Container __Cont> void sort(__Cont& c); // shorthand notation // Expands to template <typename __Cont> requires Container<__Cont>() void sort(__Cont & c);

概念Lite将如何与可变模板交互? 我看了Bjarne Strustrup的演讲,他给出了下面的例子,说明即将到来的C++概念。 void sort(Container& c); // terse notation // Expands to template <Container __Cont> void sort(__Cont& c); // shorthand notation // Expands to template <typename __Cont> requires Container<__Cont>() void sort(__Cont & c);,c++,variadic-templates,c++-concepts,C++,Variadic Templates,C++ Concepts,如果是这样,Comparable…意味着参数包中的所有元素都是相同的类型,或者只是它们都是Comparable类型,因此包中可能同时包含int和string?(两者具有可比性,但互不相同) 好奇的人想知道。我相信简洁格式的目的是要求包中的所有元素必须是相同类型的。这源自n3701§5.3中的示例,该示例说明 void sort(Random_access_iterator p, Random_access_iterator q); 应该相当于 template<Random_access

如果是这样,
Comparable…
意味着参数包中的所有元素都是相同的类型,或者只是它们都是
Comparable
类型,因此包中可能同时包含
int
string
?(两者具有可比性,但互不相同)


好奇的人想知道。

我相信简洁格式的目的是要求包中的所有元素必须是相同类型的。这源自n3701§5.3中的示例,该示例说明

void sort(Random_access_iterator p, Random_access_iterator q);
应该相当于

template<Random_access_iterator __Ran>
void sort(__Ran p, __Ran q);
模板
无效排序(p,q);
因为

默认情况下,如果使用相同的受约束参数 两个参数的类型名称,这些参数的类型必须相同。 我们选择重复使用受约束的参数类型名称 “相同类型”,因为(在大多数环境中)是最常见的情况, 一个标识符在一个范围内使用两次是很奇怪的,因为它有两个不同的 这里的目的是优化最简单情况的简洁表示法。”

但我不知道如何用当前('14)模板语法将其扩展到您的
最大值
。在n3701标准措辞的拟议变更中,仅讨论了简单的情况

§7.1.6.5受约束类型说明符[dcl.规范受约束]

在范围内首次使用概念名或部分概念id会绑定 将名称添加到占位符类型,以便相同名称的后续使用引用 同样的类型

但它不能解释变量之间的相互作用。可能需要等待第三次修订来澄清这一点。

我不知道是否是概念文件的最新版本,但在4.5.1中,它似乎描述了如何将类型要求与可变参数列表一起使用。看来

template <Comparable... T>
auto maximum(T... values) -> <return-type-goes-here>
模板
自动最大值(T…值)->

将要求每个参数满足
可比性
要求,但不限制类型
T.
都是相同的。这一要求需要单独实施。顺便说一句,我知道如何施加相同类型需求的唯一方法是与C++11中相同的方法,但概念设施可能有更好的方法。

在OPs示例中,它不仅是参数包,而且是第一个参数。您的答案还将问题留给了概念的作者如何编写类似于
void sort(迭代器a、迭代器b)的函数
当我明确希望
a
b
可以有不同的类型时。嗯,我得承认我从来都不是概念迷-/@丹尼尔弗里:如果你需要
a
b
有所不同,不要使用简洁的形式<代码>模板作废排序(A、B)@DanielFrey:我也不知道如何将
自动最大值(可比c,可比…rest)
写入
模板自动(???c,??…rest)
要求所有
c
rest…
具有相同的类型,因此答案中的最后一句话。@KennyTM
要求
包中充满相同的类型,如果非空,则该类型的实例符合要求。概念不难,但转换比非变量更复杂。C++14是否允许
auto
的隐式返回类型,因此不需要?@Motti:如果我回忆正确,这取决于函数的编写方式。考虑到所有类型都不同,我不太确定编译器是否可以直接计算出来。是的,我的问题是问这些类型是否不同。@Motti:。。。我想我已经回答了:“……但是没有限制,类型
T..
都是相同的”N3701是更高版本:(013-06-28)
template <Comparable... T>
auto maximum(T... values) -> <return-type-goes-here>