c++-concepts相关内容
我想要一个概念,需要一个任意向量作为返回类型: template概念 HasVector = 需要 (T t) {{ T.vec() } ->std::same_as>;//作品{ T.vec() } ->std::same_as>;//想在这里放一些任意的东西} 这样我们就会有如下内容: class A {std::vec
..
概念非常适合将错误定位到“不满足约束"的代码行. 但是,我想知道是否可以在那里发布自定义信息消息.static_assert 的好处就是这种可能性.用例:任何想要帮助用户找出某个表达式不满足约束的原因的库. 这里是一个简单的例子,只是为了有一些代码.您可能会争辩说,任何体面的“用户"都必须能够找出编译器的注释"因为 'is_base_of'评估为假“,但更多的自定义信
..
我在下面有一个简单的代码片段,它使用以下编译: g++-9 -std=c++2a -fconcepts 这是试图定义一个需要函数存在的概念.我希望输出是“是",但它不是......知道为什么吗?谢谢. #include 模板 概念 bool HasFunc1 =需要(T){{ T::func1() } ->国际;};结构测试{int func1(){返回 5;}};int main(
..
试图向 SFINAE 说再见. 是否可以使用concepts来区分函数,以便编译器根据发送的参数是否满足concept约束来匹配正确的函数?> 例如重载这两个: //(a)void doSomething(auto t) {/* */}//(b)void doSomething(ConceptA auto t) {/* */} 所以当被调用时,编译器会在每次调用时匹配正确的函数: d
..
如何编写一个概念来描述启用基于范围的 for 循环的类型? 一种尝试是: 模板 概念 bool RRange= 要求(范围范围){{std::begin(range),std::end(range)};}; 但我真正想要的是这样的东西: 模板 概念 bool RRange= 要求(范围范围){{for(自动&& 项目:范围);};};//编译错误 也就
..
简介 我想使用概念和/或类型特征检测类是否具有带有 std::array 参数的成员函数. 例如:下面的类将传递这个概念. class OStreamRealizationGood{模板uint8_t 发送(std::array数组)}; 到目前为止,我使用了一个概念技巧.诀窍是将大小定义为 0.所以我的概念是这样的: template概念 OStream = requires(
..
C ++ 20 草稿 [concept.default.init]不能精确定义 default_initializable template概念default_initializable = Constructible_from&&需要{T {};}&&是默认可初始化的
..
考虑以下示例来计算两个值之间的绝对差. template自动abs_diff(const T _a,const T _b){返回(_a> _b)吗?(_a-_b):(_b-_a);} 对于某些内置类型, std :: abs 提供了卓越的性能,因此如果 std :: abs(T x)存在,我想使用它(假设对于整数,我们对不同的下溢/上溢行为不感兴趣).为此,我尝试添加以
..
考虑这个小代码段 命名空间nsp{template概念Addable = require(const T& a,const T& b){{a + b}->std :: convertible_to结构C{C();};}templatensp :: C T :: C(){}; 如图
..
考虑以下代码: #includeconstexpr int fun(int const&){return 5;}结构T {int x;};int main(){std :: cout
..
当在类外定义了使用 requires 子句的类模板的成员时,如果 requires 不是,则 gcc 不会抱怨指定,而 clang 则指定. 请考虑以下代码段: #includetemplate需要std :: integralFoo类{上市:void f
..
与下面的无效代码等效的道德是什么? //假设您要检查作为概念的一部分,//如果对类型的某些操作导致对此类概念进行建模的类型.//您不能用相同的概念约束结果类型//以同样的方式,您不能拥有自我参照类型//(这将导致递归定义)模板概念Int = require(const T& a,const T& b){{a + b}->Int;//编译器不知道该怎么办}; 解决方案 假设作为
..
SFINEE是否在概念参数内起作用?(也许这里不叫SFINAE).示例: 模板要求std :: invocable&&//)自动foo(F f,int a)->整型 是否需要上述 std :: invocable
..
我认为c ++概念是编写具有更好的错误消息和更快的编译时间的c ++模板代码的更好方法,因此我将Visual Studio升级到2019年,但仍在等待clang支持概念 但是我用Visual Studio 2019中的msvc和mingw-w64中的g ++ 8测试了一些简单的代码,但遇到了一些麻烦. 这是测试: #include使用命名空间std;//可以在
..
假设我有一个 MyCustomType 与 SomeOtherType 进行了比较: struct SomeOtherType {整数值constexpr bool operator ==((const SomeOtherType& rhs)const =默认值;};struct MyCustomType {int x;constexpr bool operator ==((const MyC
..
关于模板和鸭子输入之间的关系,有一个更早的问题(8年前!): 不是真的. 如果我们接受模板已经在编译时输入鸭子 我不同意链接问题和Wikipedia页面上的已接受答案,因为在编译时而不是运行时执行同一件事并不是说服力的理由完全不同的名称.例如,请参见静态多态性与动态多态性. 然后这些概念显然不比模板更像鸭子 这里的另一个论点是,鸭子类型通常假定您通过尝试使用类型来表达类型
..
问题可能很奇怪,所以这里是一个简短的激励示例: #include#include模板//gcc 8.3的解决方法,其中volatile int不可复制使用is_tc = std :: is_trivially_copyable
..
G ++和Clang ++同意以下代码段不是有效的C ++: templatestruct Tensor {};templatedouble InnerProduct(Tensor昏暗的1常量& ;、 Tensor昏暗的1常量&){返回0.0;}templatedouble DoubleInnerProduct(Tens
..
我注意到,大多数(如果不是全部)容器现在都需要其 :: iterator 类型来满足 LegacySomethingIterator 而不是 SomethingIterator . 例如, std :: vector :: iterator RandomAccessIterator ,为什么要添加这些内容?在我看来,新的变体只不过是传统变体的影子,没有区别. 为什么首先要创建新的,
..
我最近一直在尝试C ++概念.我正在尝试以下“范围扩展"文档中的定义: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4569.pdf Same 的定义和用法使我感到困惑.由于我未知的原因,作者没有给出明确的定义.所以我正在使用: 模板概念布尔Same(){返回std :: is_same
..