c++-concepts相关内容
我正在尝试解决一些在概念和模板类型(如std::VECTOR)方面对我来说似乎很棘手的事情。 我正在尝试应用编译时间约束,类似于我在T上使用std::move的方式,但在C上使用PushBackMoovable时。它与函数Decl末尾的Requires一起工作,但我希望保持一致,并将我的约束放在模板args中。我试着用“PushBackMoovable C”替换“C类”,但失败得不是很严重,
..
检查特定结构成员是否验证给定概念的简单惯用方法是什么? 我尝试了以下方法,但不起作用,因为{ T::f }生成类型float&: #include struct foo { float f; }; // ok static_assert(std::floating_point); template
..
我想检查结构/类的属性是否符合我的概念需求,但编译器抱怨。 示例: struct N { char value; auto Get() { return value; } }; struct M { int value; auto Get() { return value; } }; void func3( auto n ) requires
..
我想为类似元组的类型创建一个概念。类似元组的类型将像std::pair、std::tuple和std::array一样,提供编译时已知数量的类型,可通过编译时索引的get函数访问。 我对概念还很陌生,我不知道从哪里开始。遗憾的是,头中似乎没有这样的概念。 例如,我可以写: template concept tuple_lik
..
考虑以下代码: struct A { template concept foo = true; }; 它不能编译。我的浪10给了我error: concept declarations may only appear in global or namespace scope,GCC也说了类似的话。 有什么不允许的原因吗?我不明白为什么它不能
..
目前我正在学习C++,决定还是从C++20开始吧。但是,这些代码快把我逼疯了,因为我认为结果没有任何意义。 以下代码将打印句子Valid array.。我上面的意思是,这是不对的。它根本不应该打印句子,因为我在参数中插入的类型与概念不匹配。 使用最新的GCC和C++2A(GNU)参数在VS2022预览版3和an online compiler上进行测试,生成相同的结果。 #inclu
..
当我尝试此示例时: template concept only_int = std::same_as; int add_ints(only_int auto&&... args) { return (std::forward(args) + ... + 0); } 它起作用了……但当我只这样声明的时候:
..
假设我有一个模板化类型,例如 template struct mytype { }; 如何编写检查类型是否为该模板的实例化的概念? template concept MyType = requires(T x) { ??? } 我想不出一种明显的方法来做到这一点,而不是解析为老式的专
..
我偶然发现了这个: #include #include template concept IsFoo = requires(T a) { {a.a} -> std::same_as; }; #if 1 // Will not compile, because Foo currently has inco
..
看起来您可以将lambda放入概念中,然后在其中编写代码。让我们以此为例。我更倾向于这些概念的标准概念,并记住这只是本例的目的-godbolt template concept labdified_concept = requires { [](){ T t, tt; // d
..
此问题是one 的后续问题 [temp.concept]/5表示: 概念未实例化([temp.spec])。 [ 注意:表示概念专门化的id表达式作为表达式([expr.prim.id])求值。[.]] 因此,命名概念专门化表达式可能因可访问性而具有不同的值。 如果是这样的话,我想知道表达式将在什么上下文中求值: 概念定义的上下文; 表达式的上下文; 表达式
..
C++ 标准委员会正在制定概念扩展的 TS(技术规范):“编程语言 - 概念的 C++ 扩展".N4377 是最新版本文档.为了包含在 C++ 标准中,要求实现功能,理想情况下是可公开访问的系统. 我知道 concept-gcc 但上面的概念提案(俗称Concepts Lite)是不同的.我听说有一个概念分支,我尝试了 的 origin/asutton/c++-conceptsgcc 的 g
..
#include #include #include 主函数(){自动 coll = std::vector{ 1, 2, 3 };范围::复制(科尔,范围::ostream_iterator{ std::cout, ", " });//行范围::复制(科尔,std::ostream_iterator{ s
..
令我惊讶的是,这个类似概念的断言在 RangeV3 中失败. #include#include诠释主要(){static_assert(ranges::WeaklyIncrementable>>());} 这是为什么呢? 这意味着我不能像使
..
cppreference.com 指出: 概念不能递归地引用自己 但是我们如何定义一个概念来表示整数或整数向量,或整数向量的向量等. 我可以拥有这样的东西: 模板 概念 bool IInt0 = std::is_integral_v;模板||需要(类型 tt){{*std::begin(tt)} ->Iint0;};模板||需要(类型 tt){{*s
..
我正在观看 Walter Brown 的 CppCon2014 的第二部分谈论模板元编程,在此期间,他讨论了他新颖的void_t 构造的使用.在他的演讲中,Peter Sommerlad 问了他一个我不太明白的问题.(链接直接指向问题,讨论中的代码直接发生在此之前) 萨默拉德问道 Walter,这是否意味着我们现在实际上可以实现精简版的概念? 沃尔特回应了 哦耶!我已经完成
..
有没有办法允许带有模板参数的concept可以接受提供的任何模板参数? 即模板参数占位符的某种通配符魔术? 使用示例: template概念源自_或_相同_as =std::same_as||std::derived_from; 以上是必需的,因为不幸的是原始类型 对于is_base_of 和derived_from 的行为与类类型不同. 现
..
在回答中another question 我发布了,Jack Harwood 分享了一个很好的解决方案,使用概念检测空的可变参数包.示例问题是使用递归计算参数包参数的数量.我在下面重现了他的解决方案. template 概念 NonVoidArgs = sizeof...(Args) >0;模板 概念 VoidArgs = sizeof...(Args) == 0;模板
..
是否可以使用 typedef 或 using 在概念内声明类型别名,如概念 TS 所提议的那样?如果我尝试类似下面的 MWE,代码不会编译(使用 gcc 6.2.1 和 -fconcepts 开关) #include 模板概念 bool TestConcept (){返回要求(T t){使用 V = T;std::is_integral::value;};}int main(){返回0;}
..
这个问题 演示了如何使用 C++20 概念为 函数 模板选择重载.我正在尝试做一些类似的事情:为 class 模板选择 specializations. 我从 Angle 的类模板开始,它包装了一个包含以弧度表示的角度的浮点值.使用概念,我可以确保用户不会使用浮点类型以外的任何东西实例化 Angle: 模板 结构角度{ T m_radians;}; 后来,我决定让客户使用可以处理整数类型
..