正如Andrew Sutton在一些会谈和论文中指出的那样,Concepts Lite提案确实具有基于概念的重载功能,同时没有概念图的概念,即模板参数完全由概念检查.编译器.鉴于此,目前尚不清楚他们如何解决Siek和Gregor在2005年论文中描述的问题," 明确的模型定义是必要的 ".简而言之,问题可以通过以下文章引用来说明.
因此,某些输入迭代器类型(例如istream_iterator)会被错误分类为前向迭代器.这有什么危险?一些算法基于Input_iterator与Forward_iterator进行调度.
(除了迭代器之外还有更多的例子.)
是的,我知道上面提到的论文考虑了C++ 0x概念,但问题似乎是概念提议的"通用".
n3351 A Concept Design for the STL中的建议是继续使用迭代器类别标签:
concept InputIterator<WeakInputIterator I> =
EqualityComparable<I> &&
Derived<IteratorCategory<I>, input_iterator_tag>;
Run Code Online (Sandbox Code Playgroud)
在预计包含在n4377 C++ 概念扩展标准中的语法中:
template<typename I>
concept bool InputIterator =
WeakInputIterator<I>() && EqualityComparable<I>() &&
Derived<IteratorCategory<I>, input_iterator_tag>();
Run Code Online (Sandbox Code Playgroud)
来自前一篇论文:
虽然 C++11 可以评估所有静态需求 [...],但我们仍然需要根据语义需求区分一些概念。迭代器类别为我们解决了这个问题。
一般来说,可以通过检查类型谓词(例如,嵌套类型或常量,或类型函数)来表达语义要求,该类型谓词仅出于断言运行时语义的目的而存在。
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |