104得票3回答
概念和模板约束之间有什么区别?

我想知道C++全概念提案和模板约束(例如D语言中出现的约束条件或C++1y中的新概念轻量级提案)之间的语义差异是什么。 全面的概念能够做到什么,而模板约束不能做到什么?

71得票1回答
void_t可以实现概念吗?

我正在观看Walter Brown在CppCon2014关于模板元编程的第二部分,他讨论了他的新颖void_t<>构造的用途。在他的演讲中,Peter Sommerlad问了一个问题,我没有完全理解。(链接直接跳转到问题,讨论的代码就在之前) Sommerlad问道: Wal...

70得票3回答
在C++中限制“auto”是否有违其初衷?

在C++20中,我们现在可以将auto关键字限制为特定类型。因此,如果我有一些没有任何限制的代码,类似于以下内容:auto something(){ return 1; } int main(){ const auto x = something(); return x; } 这...

68得票1回答
C++的概念和Rust的特质有哪些相似之处和不同之处?

在Rust中,抽象的主要工具是traits。在C++中,有两种抽象工具:抽象类和模板。为了摆脱使用模板的一些缺点(例如难以阅读的错误消息),C++引入了概念,它们是"命名的需求集"。 这两个特性看起来相当相似: - 定义trait/concept是通过列出要求来完成的。 - 两者都可以用于...

65得票2回答
使用概念模板指定具有成员函数模板的类型的概念(Concepts Lite)。

我正在尝试使用Concepts Lite来指定一个概念,以限制具有成员函数模板的高阶类型。然而,在technical specification或tutorial中,我无法找到处理概念内模板语句的条款。 这该如何实现? 例如:假设我有一个名为HKT的高阶类型,其中包含一个成员函数模板F: ...

61得票1回答
新的迭代器要求

我注意到现在大多数容器都要求它们的::iterator类型满足LegacySomethingIterator而不是SomethingIterator。例如,std::vector<>::iterator现在需要: iteratorLegacyRandomAccessIterat...

58得票1回答
为什么在C++20中unique_ptr不能与nullptr_t相等比较?

使用C++20的概念(concept)时,我注意到std::unique_ptr似乎无法满足std::equality_comparable_with<std::nullptr_t,...>概念。根据std::unique_ptr的定义,在C++20中应该实现以下内容: temp...

50得票2回答
为什么双重否定会改变C++概念的值?

我的一个朋友向我展示了一个使用概念的C++20程序,让我感到困惑: struct A { static constexpr bool a = true; }; template <typename T> concept C = T::a || T::b; template &...

44得票2回答
如何使用C++概念(“概念轻量级”)支持构建gcc?

C++标准委员会正在制定一个名为“编程语言-C++概念扩展”的TS(技术规范)扩展。 N4377 是该文档的最新版本。为了纳入C++标准,需要实现这些功能,最好是在公开可访问的系统上。 我知道concept-gcc,但上述提议(俗称为Concepts Lite)不同。我听说有一个概念分支,并...

41得票2回答
C++的概念与Haskell的类型类有何不同?

C++概念从Concepts TS中提取后最近已经合并到GCC trunk。Concepts允许通过要求类型满足概念的条件(例如“可比较”)来限制通用代码。 Haskell拥有类型类。我不太熟悉Haskell。概念和类型类有什么关系?