c++-concepts相关内容

用于检查容器类中是否存在函数和隐式演绎规则的C++概念

我正在尝试解决一些在概念和模板类型(如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 ..
发布时间:2022-05-16 16:40:12 C/C++开发

使用概念检查属性类型

我想检查结构/类的属性是否符合我的概念需求,但编译器抱怨。 示例: struct N { char value; auto Get() { return value; } }; struct M { int value; auto Get() { return value; } }; void func3( auto n ) requires ..
发布时间:2022-05-16 16:32:16 C/C++开发

C++20概念来检查类似元组的类型

我想为类似元组的类型创建一个概念。类似元组的类型将像std::pair、std::tuple和std::array一样,提供编译时已知数量的类型,可通过编译时索引的get函数访问。 我对概念还很陌生,我不知道从哪里开始。遗憾的是,头中似乎没有这样的概念。 例如,我可以写: template concept tuple_lik ..
发布时间:2022-05-16 16:03:05 C/C++开发

如何正确运用概念?

目前我正在学习C++,决定还是从C++20开始吧。但是,这些代码快把我逼疯了,因为我认为结果没有任何意义。 以下代码将打印句子Valid array.。我上面的意思是,这是不对的。它根本不应该打印句子,因为我在参数中插入的类型与概念不匹配。 使用最新的GCC和C++2A(GNU)参数在VS2022预览版3和an online compiler上进行测试,生成相同的结果。 #inclu ..
发布时间:2022-05-16 14:06:45 C/C++开发

C++概念:检查模板实例化

假设我有一个模板化类型,例如 template struct mytype { }; 如何编写检查类型是否为该模板的实例化的概念? template concept MyType = requires(T x) { ??? } 我想不出一种明显的方法来做到这一点,而不是解析为老式的专 ..
发布时间:2022-05-16 12:56:53 C/C++开发

在哪个访问控制上下文中评估概念?

此问题是one 的后续问题 [temp.concept]/5表示: 概念未实例化([temp.spec])。 [ 注意:表示概念专门化的id表达式作为表达式([expr.prim.id])求值。[.]] 因此,命名概念专门化表达式可能因可访问性而具有不同的值。 如果是这样的话,我想知道表达式将在什么上下文中求值: 概念定义的上下文; 表达式的上下文; 表达式 ..
发布时间:2022-03-07 16:45:26 C/C++开发

如何使用 C++ 概念(“concepts lite")支持构建 gcc?

C++ 标准委员会正在制定概念扩展的 TS(技术规范):“编程语言 - 概念的 C++ 扩展".N4377 是最新版本文档.为了包含在 C++ 标准中,要求实现功能,理想情况下是可公开访问的系统. 我知道 concept-gcc 但上面的概念提案(俗称Concepts Lite)是不同的.我听说有一个概念分支,我尝试了 的 origin/asutton/c++-conceptsgcc 的 g ..
发布时间:2022-01-23 21:08:11 C/C++开发

如何定义递归概念?

cppreference.com 指出: 概念不能递归地引用自己 但是我们如何定义一个概念来表示整数或整数向量,或整数向量的向量等. 我可以拥有这样的东西: 模板 概念 bool IInt0 = std::is_integral_v;模板||需要(类型 tt){{*std::begin(tt)} ->Iint0;};模板||需要(类型 tt){{*s ..
发布时间:2021-12-16 09:10:10 C/C++开发

void_t“可以实现概念"?

我正在观看 Walter Brown 的 CppCon2014 的第二部分谈论模板元编程,在此期间,他讨论了他新颖的void_t 构造的使用.在他的演讲中,Peter Sommerlad 问了他一个我不太明白的问题.(链接直接指向问题,讨论中的代码直接发生在此之前) 萨默拉德问道 Walter,这是否意味着我们现在实际上可以实现精简版的概念? 沃尔特回应了 哦耶!我已经完成 ..

使用概念检测空参数包

在回答中another question 我发布了,Jack Harwood 分享了一个很好的解决方案,使用概念检测空的可变参数包.示例问题是使用递归计算参数包参数的数量.我在下面重现了他的解决方案. template 概念 NonVoidArgs = sizeof...(Args) >0;模板 概念 VoidArgs = sizeof...(Args) == 0;模板 ..
发布时间:2021-09-16 19:01:32 C/C++开发

C++ 概念精简版和类型别名声明

是否可以使用 typedef 或 using 在概念内声明类型别名,如概念 TS 所提议的那样?如果我尝试类似下面的 MWE,代码不会编译(使用 gcc 6.2.1 和 -fconcepts 开关) #include 模板概念 bool TestConcept (){返回要求(T t){使用 V = T;std::is_integral::value;};}int main(){返回0;} ..
发布时间:2021-09-11 19:47:04 C/C++开发

使用概念选择类模板特化

这个问题 演示了如何使用 C++20 概念为 函数 模板选择重载.我正在尝试做一些类似的事情:为 class 模板选择 specializations. 我从 Angle 的类模板开始,它包装了一个包含以弧度表示的角度的浮点值.使用概念,我可以确保用户不会使用浮点类型以外的任何东西实例化 Angle: 模板 结构角度{ T m_radians;}; 后来,我决定让客户使用可以处理整数类型 ..
发布时间:2021-09-05 18:30:23 C/C++开发