C++ 什么是约束模板?
Herb Sutters在演讲中提到了受约束的模板(又称概念精简版) 我知道boost有一个很长时间的概念包,当模板推断机制找不到操作符、函数或访问冲突模式时,它可以很好地打印错误消息 我在上遇到过这样的情况,即已经有了一个实验分支来实现。然而,通过查看当前版本,我找不到任何提示,这是否已经是C++ 什么是约束模板?,c++,c++14,C++,C++14,Herb Sutters在演讲中提到了受约束的模板(又称概念精简版) 我知道boost有一个很长时间的概念包,当模板推断机制找不到操作符、函数或访问冲突模式时,它可以很好地打印错误消息 我在上遇到过这样的情况,即已经有了一个实验分支来实现。然而,通过查看当前版本,我找不到任何提示,这是否已经是C++14的一部分 所以问题很简单: Lite概念会成为C++14的一部分吗?(首选标准中的参考。我找不到,而且我对标准不是很熟悉。) 它的正确语法是什么?(Herb的提案和幻灯片在这里有分歧,我不知道哪
C++14
的一部分
所以问题很简单:
- Lite概念会成为C++14的一部分吗?(首选标准中的参考。我找不到,而且我对标准不是很熟悉。)
- 它的正确语法是什么?(Herb的提案和幻灯片在这里有分歧,我不知道哪一个更为最新)
- 您能给出一个约束(谓词)和约束模板的最小示例吗
<强>注:< /强>如果您等待得足够长,我会尝试让GCC分支运行,并且至少可以说关于实验实现的任何东西,但是这并不意味着语法的正确性。
概念Lite是C++的完整概念设计的“约束”部分。在中对其进行了非常详细的描述。第2章是一个简短的教程,它快速地介绍了核心原则及其应用,这对于那些不想通读全部56页的人来说是非常棒的
概念Lite将不是C++14的一部分,它将在今年晚些时候作为单独的技术规范发布。TS措辞的最新草稿为 有几种不同的约束语法变体。Herb在演讲中使用的代码示例:auto mean(const Sequence& seq) {
auto n = 0.0;
for (auto x : seq)
n += x;
return n / seq.size();
}
被称为“简洁语法”,因为它是与详细语法相对应的较短语法:
template <typename __T>
requires Sequence<__T>()
auto mean(const __T& seq) {
auto n = 0.0;
for (auto x : seq)
n += x;
return n / seq.size();
}
假设积分
,输入计数器
,和相同
的直接定义。该概念定义确保,对于正在测试的t
类型的一些发明值t
:
是一个有效的表达式,它返回一个对t.size()
积分概念建模的类型
有效,并返回一个对t.begin()
建模的类型InputIterator
- 同样适用于
t.end()
- 由
返回的t.begin()
与由inputierator
返回的类型相同t.end()
template <typename T>
concept bool Sequence() {
return requires(T t) {
{t.size()} -> Integral;
{t.begin()} -> InputIterator;
{t.end()} -> InputIterator;
requires Same<decltype(t.begin()), decltype(t.end())>();
}
}