c++-concepts相关内容

如何通过自定义错误消息使概念失败 (C++20)

概念非常适合将错误定位到“不满足约束"的代码行. 但是,我想知道是否可以在那里发布自定义信息消息.static_assert 的好处就是这种可能性.用例:任何想要帮助用户找出某个表达式不满足约束的原因的库. 这里是一个简单的例子,只是为了有一些代码.您可能会争辩说,任何体面的“用户"都必须能够找出编译器的注释"因为 'is_base_of'评估为假“,但更多的自定义信 ..
发布时间:2021-09-04 20:46:46 C/C++开发

C++ 概念 - 我可以有一个要求在类中存在函数的约束吗?

我在下面有一个简单的代码片段,它使用以下编译: g++-9 -std=c++2a -fconcepts 这是试图定义一个需要函数存在的概念.我希望输出是“是",但它不是......知道为什么吗?谢谢. #include 模板 概念 bool HasFunc1 =需要(T){{ T::func1() } ->国际;};结构测试{int func1(){返回 5;}};int main( ..
发布时间:2021-09-04 20:41:02 C/C++开发

如何写一个简单的范围概念?

如何编写一个概念来描述启用基于范围的 for 循环的类型? 一种尝试是: 模板 概念 bool RRange= 要求(范围范围){{std::begin(range),std::end(range)};}; 但我真正想要的是这样的东西: 模板 概念 bool RRange= 要求(范围范围){{for(自动&& 项目:范围);};};//编译错误 也就 ..
发布时间:2021-07-02 20:11:00 C/C++开发

使用概念或 SFINAE 检查类是否具有带有 std::array 参数的模板化成员函数

简介 我想使用概念和/或类型特征检测类是否具有带有 std::array 参数的成员函数. 例如:下面的类将传递这个概念. class OStreamRealizationGood{模板uint8_t 发送(std::array数组)}; 到目前为止,我使用了一个概念技巧.诀窍是将大小定义为 0.所以我的概念是这样的: template概念 OStream = requires( ..
发布时间:2021-06-02 20:39:45 C/C++开发

C ++ 20概念要求存在精确的函数签名

考虑以下示例来计算两个值之间的绝对差. template自动abs_diff(const T _a,const T _b){返回(_a> _b)吗?(_a-_b):(_b-_a);} 对于某些内置类型, std :: abs 提供了卓越的性能,因此如果 std :: abs(T x)存在,我想使用它(假设对于整数,我们对不同的下溢/上溢行为不感兴趣).为此,我尝试添加以 ..
发布时间:2021-04-20 19:06:13 C/C++开发

自引用C ++ 20概念

与下面的无效代码等效的道德是什么? //假设您要检查作为概念的一部分,//如果对类型的某些操作导致对此类概念进行建模的类型.//您不能用相同的概念约束结果类型//以同样的方式,您不能拥有自我参照类型//(这将导致递归定义)模板概念Int = require(const T& a,const T& b){{a + b}->Int;//编译器不知道该怎么办}; 解决方案 假设作为 ..
发布时间:2021-04-20 19:05:46 C/C++开发

Visual Studio 2019拒绝`bool concept`,而gcc 8不会在没有`bool`的情况下编译概念

我认为c ++概念是编写具有更好的错误消息和更快的编译时间的c ++模板代码的更好方法,因此我将Visual Studio升级到2019年,但仍在等待clang支持概念 但是我用Visual Studio 2019中的msvc和mingw-w64中的g ++ 8测试了一些简单的代码,但遇到了一些麻烦. 这是测试: #include使用命名空间std;//可以在 ..
发布时间:2021-04-20 19:05:28 C/C++开发

C ++“概念"和"C ++"之间的关系是什么?和鸭打字?

关于模板和鸭子输入之间的关系,有一个更早的问题(8年前!): 不是真的. 如果我们接受模板已经在编译时输入鸭子 我不同意链接问题和Wikipedia页面上的已接受答案,因为在编译时而不是运行时执行同一件事并不是说服力的理由完全不同的名称.例如,请参见静态多态性与动态多态性. 然后这些概念显然不比模板更像鸭子 这里的另一个论点是,鸭子类型通常假定您通过尝试使用类型来表达类型 ..
发布时间:2021-04-20 19:04:57 C/C++开发

新的迭代器要求

我注意到,大多数(如果不是全部)容器现在都需要其 :: iterator 类型来满足 LegacySomethingIterator 而不是 SomethingIterator . 例如, std :: vector :: iterator RandomAccessIterator ,为什么要添加这些内容?在我看来,新的变体只不过是传统变体的影子,没有区别. 为什么首先要创建新的, ..
发布时间:2021-04-19 20:50:48 C/C++开发

C ++概念相同且可分配

我最近一直在尝试C ++概念.我正在尝试以下“范围扩展"文档中的定义: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4569.pdf Same 的定义和用法使我感到困惑.由于我未知的原因,作者没有给出明确的定义.所以我正在使用: 模板概念布尔Same(){返回std :: is_same ..
发布时间:2021-04-19 20:15:03 C/C++开发